| swagger: '2.0' |
| |
| info: |
| version: "0.0.1" |
| title: changeserver |
| description: |
| Changeserver consumes changes from a Postgres replication scheme created |
| by the "transicator_output" plugin and makes them available to consumers |
| via an API. The API supports long polling so that a large number of |
| consumers may be notified of changes. |
| contact: |
| name: Apigee, Inc. |
| url: http://www.apigee.com/ |
| email: sales@apigee.com |
| license: |
| name: Apache 2.0 |
| url: https://www.apache.org/licenses/LICENSE-2.0 |
| |
| paths: |
| /changes: |
| get: |
| description: |
| Retrieve a list of changes. The query parameters may be used to |
| restrict the number of changes that are retrieved or return |
| only changes since a particular sequence. In addition, it |
| is possible to block (aka "long poll") until a new matching |
| change is available. The result will be produced in JSON format |
| unless the Accept header is used to select the protobuf format. |
| produces: |
| - application/json |
| - application/transicator+protobuf |
| parameters: |
| - name: scope |
| in: query |
| description: |
| The scope limits the changes that are returned. It is |
| extracted from a database column whenever a change is |
| made. Every call to this API must contain at least one |
| scope. Multiple "scope" parameters may also be used. |
| if more than one "scope" is included, then the operation |
| is treated as an "OR" of all the scopes, and the results |
| are sorted by sequence regardless of scope. |
| required: true |
| type: string |
| - name: selector |
| in: query |
| description: |
| Alias for "scope" query parameter with the same usage. |
| Completely interchangeable with "scope", which is no longer |
| required if "selector" param is present. |
| required: false |
| type: string |
| - name: snapshot |
| in: query |
| description: |
| If specified, then this must be set to a "snapshot ID" from Postgres. |
| This will be in the format "xmin:xmax:xip1,xip2,...xipN" and is |
| normally returned by executing "select txid_current_snapshot()". |
| By including this parameter, the change list will never include |
| any data that would be *visible* in the specified snapshot. |
| So in other words, if the value of this parameter comes from |
| a Postgres query executed during a transaction, then the |
| change server will not return any database changes that |
| were already in the snapshot. |
| required: false |
| type: string |
| - name: since |
| in: query |
| description: |
| The value of "sequence" from a previous invocation of |
| this API. If so specified, this API will only return changes |
| that happened after the change with the specified sequence. |
| Otherwise, this API will return changes since the |
| beginning. If this parameter is specified, but the specified |
| sequence no longer exists in the database, then a 400 |
| error and the error code "SNAPSHOT_TOO_OLD" will be |
| returned. |
| required: false |
| type: string |
| - name: limit |
| in: query |
| description: |
| Limit the number of changes returned by a single API |
| call. The default limit is 100. |
| required: false |
| type: integer |
| - name: block |
| in: query |
| description: |
| If specified, this sets the number of seconds that the API |
| call will block if there are no changes available since the |
| "since" value for the set of specified scopes. In the |
| event that there are no changes available when the API call |
| is made, the API will block for the specified number of |
| seconds until a matching change appears. If no changes |
| appear in the specified number of seconds, then an |
| empty change list will be returned. |
| required: false |
| type: integer |
| |
| responses: |
| 200: |
| description: Successful response |
| schema: |
| $ref: '#/definitions/ChangeList' |
| 400: |
| description: Invalid input. Error "code" will tell why. |
| a code of "SNAPSHOT_TOO_OLD" means that records dating |
| back to the "since" parameter are not available. |
| schema: |
| $ref: '#/definitions/Error' |
| |
| /health: |
| get: |
| description: |
| Describes whether the server is "healthy." When the |
| server is not healthy, it is not able to process any requests, and |
| should be killed and restarted. |
| If the server was started with a |
| management port enabled, this URL only resolves on that |
| port. |
| produces: |
| - text/plain |
| - application/json |
| responses: |
| 200: |
| description: Everything is fine. No output produced. |
| 503: |
| description: |
| Server is not healthy. Normally returns the status in textual |
| form, but if JSON is selected in the Accept header than |
| JSON will be returned. |
| schema: |
| $ref: '#/definitions/Status' |
| |
| /ready: |
| get: |
| description: |
| Describes whether the server is "ready." When the |
| server is not ready, it is not able to process any requests. |
| Load balancers should not route calls to a server that is |
| not ready. The server may not be ready because it is still |
| starting up, or because it is shutting down. It is possible |
| for a server to be "ready" but still "healthy." |
| If the server was started with a |
| management port enabled, this URL only resolves on that |
| port. |
| produces: |
| - text/plain |
| - application/json |
| responses: |
| 200: |
| description: Everything is fine. No output produced. |
| 503: |
| description: |
| Server is not ready. Normally returns the status in textual |
| form, but if JSON is selected in the Accept header than |
| JSON will be returned. |
| schema: |
| $ref: '#/definitions/Status' |
| |
| /markdown: |
| get: |
| description: |
| Changes the state of the server to denote that it has been |
| marked down. After this is called, the "/ready" path will return |
| 503, and all other API calls except "/health" will also fail with |
| 503. |
| After this API call has been made, the server will delete its |
| Postgres replication slot when it exits. Management software |
| should call this URL before a planned shutdown to ensure |
| cleanup of Postgres resources. |
| If the server was started with a |
| management port enabled, this URL only resolves on that |
| port. |
| responses: |
| 200: |
| description: Server is now marked down |
| |
| definitions: |
| Value: |
| description: |
| The value of a row in the "newRow" or "oldRow" property |
| of a change. |
| required: |
| - value |
| - type |
| properties: |
| value: |
| description: The row value in string form |
| type: string |
| type: |
| description: The Postgres numeric type of the field |
| type: integer |
| |
| Change: |
| description: A single change. |
| properties: |
| operation: |
| description: |
| The type of change. |
| "1" denotes an insert. |
| "2" denotes an update. |
| "3" denotes a delete. |
| type: integer |
| enum: |
| - 1 |
| - 2 |
| - 3 |
| table: |
| description: The name of the database table that was changed. |
| type: string |
| sequence: |
| description: |
| The unique, ordered identifier of the change in the list of |
| changes. |
| type: string |
| commitSequence: |
| description: |
| The order of this transaction's commit in the list of changes. |
| type: integer |
| format: int64 |
| changeSequence: |
| description: |
| The order of this change in the list of changes. Since |
| transactions commit in different orders, changes are not |
| necessarily shown in this order |
| type: integer |
| format: int64 |
| commitIndex: |
| description: |
| The order of this change in the list of changes for a |
| particular transaction. When multiple changes are made in |
| a transaction, they have the same commitSequence but |
| different values of commitIndex. |
| type: integer |
| format: int64 |
| txid: |
| description: |
| The database transaction ID for this change |
| type: integer |
| format: int64 |
| newRow: |
| description: |
| The new value of the row for an insert or update operation. |
| The fields in the object are named after the fields in the |
| row, and each field's value is a "Value" object. |
| type: object |
| oldRow: |
| description: |
| The old value of the row for a delete or update operation. |
| type: object |
| |
| ChangeList: |
| description: A set of changes. |
| properties: |
| firstSequence: |
| description: The oldest sequence present in the databse |
| type: string |
| lastSequence: |
| description: The newest sequence present in the databse |
| type: string |
| changes: |
| description: A list of changes, in sequence order. |
| type: array |
| items: |
| $ref: '#/definitions/Change' |
| |
| Status: |
| description: A response sent by a server that has been marked down. |
| required: |
| - status |
| - reason |
| properties: |
| reason: |
| description: |
| The reason that a server has been marked down. Suitable for |
| writing in to logs and diagnostic errors. |
| type: string |
| status: |
| description: |
| If the server has been marked down, a reason why. |
| One of "Unhealtly" or "NotReady". |
| |
| Error: |
| description: An error in processing by the server. |
| required: |
| - code |
| - error |
| properties: |
| code: |
| description: A short symbolic description of the error |
| type: string |
| error: |
| description: A short description of the error |
| type: string |
| description: |
| description: A longer description of the error |
| type: string |
| |