Topics Api Calls
Topics are resources that can hold messages. Publishers (users/systems) can create topics on demand and name them (Usually with names that make sense and express the class of messages delivered in the topic). A topic name must be scoped to a project.
[PUT] Manage Topics - Create new topic
This request creates a new topic with the given topic_name in a project with a PUT request
Request
PUT "/v1/projects/{project_name}/topics/{topic_name}"
RequestBody
If you need to link a schema with the topic you need to provide its name.
{
"schema": "schema-1"
}
Where
- Project_name: Name of the project to create
- Topic_name: The topic name to create
Example request
curl -X PUT -H "Content-Type: application/json"
"https://{URL}/v1/projects/BRAND_NEW/topics/monitoring?key=S3CR3T"
Responses
If successful, the response contains the newly created topic.
Success Response
200 OK
{
"name": "projects/BRAND_NEW/topics/monitoring",
"created_on": "2020-11-21T00:00:00Z"
}
Errors
Please refer to section Errors to see all possible Errors
[DELETE] Manage Topics - Delete topic
This request deletes the defined topic in a project with a DELETE request
Request
DELETE "/v1/projects/{project_name}/topics/{topic_name}"
Where
- Project_name: Name of the project to delete
- Topic_name: The topic name to delete
Example request
curl -X DELETE -H "Content-Type: application/json"
-d '' "https://{URL}/v1/projects/BRAND_NEW/topics/monitoring?key=S3CR3T"
Responses
Success Response
Code: 200 OK
, Empty response if successful.
Errors
Please refer to section Errors to see all possible Errors
[GET] Manage Topics - Get a topic
This request gets the details of a topic in a project with a GET request
Request
GET "/v1/projects/{project_name}/topics/{topic_name}"
Where
- Project_name: Name of the project to get
- Topic_name: The topic name to get
Example request
curl -H "Content-Type: application/json"
"https://{URL}/v1/projects/BRAND_NEW/topics/monitoring?key=S3CR3T"
Responses
If successful, the response returns the details of the defined topic.
Success Response
200 OK
{
"name": "projects/BRAND_NEW/topics/monitoring",
"created_on": "2020-11-21T00:00:00Z"
}
Errors
Please refer to section Errors to see all possible Errors
[GET] Manage Topics - List Topics
This request lists all available topics under a specific project in the service using pagination.
If the USER
making the request has only publisher
role for the respective project, it will load
only the topics that he has access to(being present in a topic's acl).
It is important to note that if there are no results to return the service will return the following:
Success Response
200 OK
{
"users": [],
"nextPageToken": "",
"totalSize": 0
}
Also the default value for pageSize = 0
and pageToken = "
.
Pagesize = 0
returns all the results.
Paginated Request that returns all topics under the specified project
GET "/v1/projects/{project_name}/topics"
Where
- Project_name: Name of the project to get the list of topics
Example request
curl -H "Content-Type: application/json"
"https://{URL}/v1/projects/BRAND_NEW/topics/?key=S3CR3T"`
Responses
Success Response
200 OK
{
"topics": [
{
"name":"/project/BRAND_NEW/topics/monitoring",
"created_on": "2020-11-21T00:00:00Z"
},
{
"name":"/project/BRAND_NEW/topics/accounting",
"created_on": "2020-11-21T00:00:00Z"
}
],
"nextPageToken": "",
"totalSize": 2
}
Paginated Request that returns the first page of a specific size
GET "/v1/projects/{project_name}/topics"
Where
- Project_name: Name of the project to get the list of topics
Example request
curl -H "Content-Type: application/json"
"https://{URL}/v1/projects/BRAND_NEW/topics/?key=S3CR3T&pageSize=1"`
Responses
Success Response
200 OK
{
"topics": [
{
"name":"/project/BRAND_NEW/topics/monitoring",
"created_on": "2020-11-21T00:00:00Z"
}
],
"nextPageToken": "some_token",
"totalSize": 2
}
Paginated Request that returns the next page of a specific size
GET "/v1/projects/{project_name}/topics"
Where
- Project_name: Name of the project to get the list of topics
Example request
curl -H "Content-Type: application/json"
"https://{URL}/v1/projects/BRAND_NEW/topics/?key=S3CR3T&pageSize=1&pageToken=some_token"`
Responses
Success Response
200 OK
{
"topics": [
{
"name":"/project/BRAND_NEW/topics/accounting",
"created_on": "2020-11-21T00:00:00Z"
}
],
"nextPageToken": "",
"totalSize": 2
}
Errors
Please refer to section Errors to see all possible Errors
[POST] Publish message/s to a topic
The topic:publish endpoint publishes a message, or a list of messages to a specific topic with a POST request
Request
POST "/v1/projects/{project_name}/topics/{topic_name}:publish"
Where
- Project_name: Name of the project to post the messages
- topic_name: to post the messages
Post data
{
"messages": [
{
"attributes": {
"attr1":"test1",
"attr2":"test2"
}
,
"data":"U28geW91IHdlbnQgYWhlYWQgYW5kIGRlY29kZWQgdGhpcywgeW91IGNvdWxkbid0IHJlc2lzdCBlaCA/"
}
]
}
The value of the data property must be always encoded in base64 format.
AVRO Schema Use case
Whenever a topic has an AVRO Schema attached to it, all messages need to have their schema encoded alongside them in order for the validation to work properly.
Example request
curl -X POST -H "Content-Type: application/json"
-d $POSTDATA "https://{URL}/v1/projects/BRAND_NEW/topics/monitoring:publish?key=S3CR3T"
Responses
If successful, the response contains the messageIds of the messages published.
Success Response 200 OK
{
"messageIds": [
"100309303"
]
}
Errors
Please refer to section Errors to see all possible Errors
[POST] Attach a schema to a topic
Attach one of the project's schemas to the given topic.
Request
POST "/v1/projects/{project_name}/topics/{topic_name}:attachSchema"
Where
- Project_name: Name of the project
- topic_name: Name of the topic
Post data
{
"schema": "projects/{project_name}/schemas/{schema_name}"
}
Example request
curl -X POST -H "Content-Type: application/json"
-d $POSTDATA "https://{URL}/v1/projects/BRAND_NEW/topics/monitoring:attachSchema?key=S3CR3T"
Responses
If successful, empty response.
Errors
Please refer to section Errors to see all possible Errors
[POST] Detach a schema to a topic
Detach the topic's current assigned schema. If the topic has no assigned schema, nothing happens.
Request
POST "/v1/projects/{project_name}/topics/{topic_name}:detachSchema"
Where
- Project_name: Name of the project
- topic_name: Name of the topic
Example request
curl -X POST -H "Content-Type: application/json"
"https://{URL}/v1/projects/BRAND_NEW/topics/monitoring:detachSchema?key=S3CR3T"
Responses
If successful, empty response.
Errors
Please refer to section Errors to see all possible Errors
[GET] List ACL of a given topic
The following request returns a list of authorized users (publishers) of a given topic.
Request
GET "/v1/projects/{project_name}/topics/{topic_name}:acl"
Where
- Project_name: name of the project
- topic_name: name of the topic
Example request
curl -H "Content-Type: application/json"
"https://{URL}/v1/projects/BRAND_NEW/topics/monitoring:acl?key=S3CR3T"
Responses
If successful it returns the authorized users of the topic.
Success Response
200 OK
{
"authorized_users": [
"UserA","UserB"
]
}
Errors
Please refer to section Errors to see all possible Errors
[POST] Modify ACL of a given topic
The following request Modifies the authorized users list of a given topic
Request
POST "/v1/projects/{project_name}/topics/{topic_name}:modifyAcl"
Where
- Project_name: Name of the project
- topic_name: name of the topic
Post data
{
"authorized_users": [
"UserX","UserY"
]
}
Example request
curl -X POST -H "Content-Type: application/json"
-d $POSTDATA "https://{URL}/v1/projects/BRAND_NEW/topics/monitoring:modifyAcl?key=S3CR3T"
Responses
Success Response
200 OK
Errors
If the to-be updated ACL contains users that are non-existent in the project the API returns the following error:
404 NOT_FOUND
{
"error": {
"code": 404,
"message": "User(s): UserFoo1,UserFoo2 do not exist",
"status": "NOT_FOUND"
}
}
Please refer to section Errors to see all possible Errors
[GET] Topic Metrics
The following request returns related metrics for the specific topic: for eg the number of published messages
Request
GET "/v1/projects/{project_name}/topics/{topic_name}:metrics"
Where
- Project_name: name of the project
- topic_name: name of the topic
Example request
curl -H "Content-Type: application/json"
"https://{URL}/v1/projects/BRAND_NEW/topics/monitoring:metrics?key=S3CR3T"
Responses
If successful it returns topic's related metrics (number of messages published and total bytes).
Success Response
200 OK
{
"metrics": [
{
"metric": "topic.number_of_subscriptions",
"metric_type": "counter",
"value_type": "int64",
"resource_type": "topic",
"resource_name": "topic1",
"timeseries": [
{
"timestamp": "2017-06-27T10:20:18Z",
"value": 1
}
],
"description": "Counter that displays the number of subscriptions belonging to a specific topic"
},
{
"metric": "topic.number_of_messages",
"metric_type": "counter",
"value_type": "int64",
"resource_type": "topic",
"resource_name": "topic1",
"timeseries": [
{
"timestamp": "2017-06-27T10:20:18Z",
"value": 0
}
],
"description": "Counter that displays the number number of messages published to the specific topic"
},
{
"metric": "topic.number_of_bytes",
"metric_type": "counter",
"value_type": "int64",
"resource_type": "topic",
"resource_name": "topic1",
"timeseries": [
{
"timestamp": "2017-06-27T10:20:18Z",
"value": 0
}
],
"description": "Counter that displays the total size of data (in bytes) published to the specific topic"
},
{
"metric": "topic.number_of_daily_messages",
"metric_type": "counter",
"value_type": "int64",
"resource_type": "topic",
"resource_name": "topic1",
"timeseries": [
{
"timestamp": "2018-10-02",
"value": 30
},
{
"timestamp": "2018-10-01",
"value": 40
}
],
"description": "A collection of counters that represents the total number of messages published each day to a specific topic"
},
{
"metric": "topic.publishing_rate",
"metric_type": "rate",
"value_type": "float64",
"resource_type": "topic",
"resource_name": "topic1",
"timeseries": [
{
"timestamp": "2019-05-06T00:00:00Z",
"value": 10
}
],
"description": "A rate that displays how many messages were published per second between the last two publish events"
}
]
}
Errors
Please refer to section Errors to see all possible Errors