Release MR API documents 93/14893/1
authorsg481n <sg481n@att.com>
Sun, 24 Sep 2017 17:32:56 +0000 (17:32 +0000)
committersg481n <sg481n@att.com>
Sun, 24 Sep 2017 17:33:02 +0000 (17:33 +0000)
Issue-id: DMAAP-69
Change-Id: I84bff1eb7d2e793eccbadf4ec401ee08347c134f
Signed-off-by: sg481n <sg481n@att.com>
docs/index.rst [new file with mode: 0644]
docs/message-router/message-router.rst [new file with mode: 0644]

diff --git a/docs/index.rst b/docs/index.rst
new file mode 100644 (file)
index 0000000..be660db
--- /dev/null
@@ -0,0 +1,15 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+.. Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+
+Message Router (MR)
+====================
+
+
+
+.. toctree::
+   :maxdepth: 2
+   
+   message-router/message-router
+
+
diff --git a/docs/message-router/message-router.rst b/docs/message-router/message-router.rst
new file mode 100644 (file)
index 0000000..cbb755f
--- /dev/null
@@ -0,0 +1,348 @@
+============================================\r
+Message Router (MR) API Guide\r
+============================================\r
+\r
+HTTP Service APIs:\r
+==================\r
+\r
+DMaaP Message Router utilizes an HTTP REST API to service all Publish\r
+and Consume transactions. HTTP and REST standards are followed so\r
+clients as varied as CURL, Java applications and even Web Browsers will\r
+work to interact with Message Router.Message Router uses AAF for user's\r
+authentication and authorization.\r
+\r
+General HTTP Requirements\r
+=========================\r
+\r
+A DMaaP Message Router transactions consists of 4 distinct segments,\r
+HTTP URL, HTTP Header, HTTP Body (POST) and HTTP Response. The general\r
+considerations for each segment are as follows and are required for each\r
+of the specific transactions described in this section.\r
+\r
+HTTP URL\r
+========\r
+\r
+http[s]://Username:Password@serverBaseURL{/routing}{resourcePath}\r
+\r
+\95 The Username:Password utilizes HTTP Basic Authentication and HTTPS/TLS\r
+to securely transmit the authorization and authentication credentials\r
+that AAF needs to validate the client's access to the requested\r
+resource.\r
+\r
+\95 The serverBaseURL points to DMaaP Message Router host/port that will\r
+service the request. Optionally DME2 service end points for Message\r
+Router can be used.\r
+\r
+\95 The resourcePath specifies the specific service, or Topic, that the\r
+client is attempting to reach\r
+\r
+HTTP Header\r
+===========\r
+\r
+Specifies HTTP Headers, such as Content-Type, that define the parameters\r
+of the HTTP Transaction\r
+\r
+HTTP Body\r
+=========\r
+\r
+The HTTP Body contains the topic content when Publishing or Consuming.\r
+The Body may contain topic messages in several formats (like below) but\r
+it must be noted, that, except in very specific circumstances, messages\r
+are not inspected for content.\r
+\r
+\r
++-------------------------+----------------------------------------------------------------------------------------------------------------+\r
+| Content-Type            |  Description                                                                                                   |\r
++=========================+================================================================================================================+\r
+| text/plain              | Each line in the POST body is treated as a separate message. No partition key is specified, and therefore no   |\r
+|                                                |     order is guaranteed. This format is mainly for test, as messages are highly likely to be re-ordered when       |\r
+|                                                | delivered through the Kafka cluster.                                                                           |\r
++-------------------------+----------------------------------------------------------------------------------------------------------------+\r
+| application/json        | The payload maybe a single JSON object or a JSON array of JSON objects. Each object is handled as an individual|\r
+|                                                | message..Note that use of this format may result in equivalent but altered JSON objects sent to consumers.     | \r
+|                                                | That's because MR uses a standard JSON parser to read each object into memory before pushing the object to the |\r
+|                                                | Kafka system. At that point, the JSON object is re-written from the in-memory object. This can result in       |\r
+|                                                | re-ordered fields or changes in whitespace. If you want to preseve JSON objects exactly,                       |\r
+|                                                | use application/cambria. Recommended to follow the JSON format after validating the                            |\r
+|                                                | message in https://jsonformatter.curiousconcept.com/                                                                                                           |\r
++-------------------------+----------------------------------------------------------------------------------------------------------------+\r
+\r
+\r
+\r
+\r
+DME2 Service endpoints:\r
+=======================\r
+\r
+Message Router supports DME2 clients. That is , Client application may\r
+use DME2Client and DME2 service address to call the MessageRouter\r
+service.\r
+\r
+Example DME2 service address:\r
+\r
+Please use DMaap Message Router Run Book for complete details\r
+\r
+TEST: http://hostname/events?version=XXX&envContext=XXX&partner=XX\r
+\r
+PROD: https://hostname/events?version=XXX &envContext=XXX&partner=XX\r
+\r
+The values of version/envContext/routerOffer may change based upon the\r
+environment.\r
+\r
+The specific details for each API are described as below\r
+\r
+\r
+\r
+Publishers\r
+==========\r
+\r
+Description:\r
+===========\r
+\r
+Publishes data to Kafka server on the topic mentioned in the URL.\r
+Messages will be in the request body\r
+\r
+The MessageRouter service has no requirements on what publishers can put\r
+onto a topic. The messages are opaque to the service and are treated as\r
+raw bytes. In general, passing JSON messages is preferred, but this is\r
+due to higher-level features and related systems, not the MessageRouter\r
+broker itself. The only constraint placed on messages is their on their\r
+size \96 messages must be under the maximum size, which is currently\r
+configured at 1 MB.\r
+\r
+Request URL:\r
+===========\r
+\r
+POST http(s)://{HOST:PORT}/events/{topicname}\r
+\r
+Request Parameters\r
+==================\r
+\r
++--------------------------+---------------------------------+------------------+------------+-----------+-------------+--------------------------------+---------------------------------------------------+\r
+| Name                     | Description                     | Param Type       | Data type  | Max Len   | Req\92d       | Format                         |  Valid/Example Values                             |\r
++==========================+=================================+==================+============+===========+=============+================================+===================================================+\r
+| Topicname                | topic name to be posted         | Path             | String     | 40        | Y           |  <app namespace>.<topicname>   | Org.onap.crm.empdetails                           |\r
++--------------------------+---------------------------------+------------------+------------+-----------+-------------+--------------------------------+---------------------------------------------------+\r
+| `content-type            | To specify type of message      | Header           | String     | 20        | N           |                                | application/json text/plain application/cambria   |\r
+|                          |                                 |                  |            |           |             |                                |                                                   |\r
+|                          | content(json,text or cambria)   |                  |            |           |             |                                |                                                   |\r
++--------------------------+---------------------------------+------------------+------------+-----------+-------------+--------------------------------+---------------------------------------------------+\r
+| Username                 | userid                          | Header           | String     |           | N           | Basic Authentication Header    |                                                   |\r
++--------------------------+---------------------------------+------------------+------------+-----------+-------------+--------------------------------+---------------------------------------------------+\r
+| Password                 |                                 | Header           | String     |           | N           | Basic Authentication Header    |                                                   |\r
++--------------------------+---------------------------------+------------------+------------+-----------+-------------+--------------------------------+---------------------------------------------------+\r
+| partitionKey             |                                 |  QueryParam      | String     |           | N           | String value                   |  ?partitionKey=123                                |\r
++--------------------------+---------------------------------+------------------+------------+-----------+-------------+--------------------------------+---------------------------------------------------+\r
+\r
\r
+\r
\r
+\r
+Note:\r
+-----\r
+\r
+Publishers/user should have access on the topics. The user (id) and\r
+permissions details needs to be in AAF.\r
+\r
+Response Parameters:\r
+====================\r
+\r
++------------------+------------------------+------------+--------------+------------------------------+\r
+| Name             | Description            | Type       | Format       | Valid/Example Values         |\r
++==================+========================+============+==============+==============================+\r
+| httpStatusCode   |                        |            |              | 200, 201 etc.                |\r
++------------------+------------------------+------------+--------------+------------------------------+\r
+| mrErrorCode      | Numeric error code     |            |              | 200, 201 etc.                |\r
++------------------+------------------------+------------+--------------+------------------------------+\r
+| errorMessage     |                        |            |              | SUCCESS, or error message.   |\r
++------------------+------------------------+------------+--------------+------------------------------+\r
+| helpURL          | helpurl                |            |              |                              |\r
++------------------+------------------------+------------+--------------+------------------------------+\r
+| transactionid    | transaction-id value   |            |              |                              |\r
++------------------+------------------------+------------+--------------+------------------------------+\r
+\r
\r
+\r
+Response /Error Codes:\r
+=====================\r
+\r
++---------------------------+------------------------------------+\r
+| Response statusCode       |  Response statusMessage            |\r
++===========================+====================================+\r
+| 200-299                   | Success                            |\r
++---------------------------+------------------------------------+\r
+| 400-499                   | the client request has a problem   |\r
++---------------------------+------------------------------------+\r
+| 500-599                   | the DMaaP service has a problem    |\r
++---------------------------+------------------------------------+\r
+\r
++------------------------+----------------+---------------------------------+---------------------------------------------------------------------------------------------------------+\r
+| Error code             |   HTTPCode     |  Description                    | Issue Reason                                                                                            |\r
++========================+================+=================================+=========================================================================================================+\r
+| DMaaP\_MR\_ERR\_3001   | 413            | Request Entity too large        | Message size exceeds the batch limit <limit>.Reduce the batch size and try again                        |\r
++------------------------+----------------+---------------------------------+---------------------------------------------------------------------------------------------------------+\r
+| DMaaP\_MR\_ERR\_3002   | 500            | Internal Server Error           | Unable to publish messages. Please contact administrator                                                |\r
++------------------------+----------------+---------------------------------+---------------------------------------------------------------------------------------------------------+\r
+| DMaaP\_MR\_ERR\_3003   | 400            | Bad Request                     | Incorrect Batching format. Please correct the batching format and try again                             |\r
++------------------------+----------------+---------------------------------+---------------------------------------------------------------------------------------------------------+\r
+| DMaaP\_MR\_ERR\_3004   | 413            | Request Entity too large        | Message size exceeds the message size limit <limit>.Reduce the message size and try again               |\r
++------------------------+----------------+---------------------------------+---------------------------------------------------------------------------------------------------------+\r
+| DMaaP\_MR\_ERR\_3005   | 400            | Bad Request                     | Incorrect JSON object. Please correct the JSON format and try again                                     |\r
++------------------------+----------------+---------------------------------+---------------------------------------------------------------------------------------------------------+\r
+| DMaaP\_MR\_ERR\_3006   | 504            | Network Connect Timeout Error   | Connection to the DMaaP MR was timed out.Please try again                                               |\r
++------------------------+----------------+---------------------------------+---------------------------------------------------------------------------------------------------------+\r
+| DMaaP\_MR\_ERR\_3007   | 500            | Internal Server Error           | Failed to publish  messages to topic <topicName>. Successfully published <count > number of messages.   |\r
++------------------------+----------------+---------------------------------+---------------------------------------------------------------------------------------------------------+\r
+|                        |  503           |  Service Unavailable            |  Service Unavailable                                                                                    |\r
++------------------------+----------------+---------------------------------+---------------------------------------------------------------------------------------------------------+\r
+\r
\r
+\r
+Sample Request:\r
+==============\r
+\r
++-----------------------------------------------------------------------------------+\r
+| POST                                                                              |\r
+|                                                                                   |\r
+| *Payload-* *{"message":"message description"}* *Content-Type: application/json*   |\r
+|                                                                                   |\r
+| Example:                                                                          |\r
+|                                                                                   |\r
+| curl -u XXXX@abc.com:X -H 'Content-Type:text/plain' -X POST -d @sampleMsg.txt     |\r
+|                                                                                   |\r
+| {    "count": 1,                                                                  |\r
+|                                                                                   |\r
+|     "serverTimeMs": 19"                                                           |\r
+|                                                                                   |\r
+| }                                                                                 |\r
++-----------------------------------------------------------------------------------+\r
+\r
+Sample Response:\r
+===============\r
+\r
++---------------------------------------------------------------------+\r
+| HTTP/1.1 200 OK                                                     |\r
+|                                                                     |\r
+|     Server: Apache-Coyote/1.1                                       |\r
+|                                                                     |\r
+|     transactionId: 28-12-2015::08:18:50:682::<IP>::28122015552391   |\r
+|                                                                     |\r
+|     Content-Type: application/json                                  |\r
+|                                                                     |\r
+|     Content-Length: 42                                              |\r
+|                                                                     |\r
+|     Date: Mon, 28 Dec 2015 13:18:50 GMT                             |\r
++---------------------------------------------------------------------+\r
+\r
\r
+\r
+Subscribers:\r
+===========\r
+\r
+Description:\r
+\r
+ To subscribe to a MessageRouter topic, a subscriber issues a GET to the RESTful HTTP endpoint for events.\r
+\r
+\r
+\r
+Request URL:\r
+============\r
+\r
+GET http(s)://{HOST:PORT}}/events/{topicname}/{consumegroup}/{consumerid}?{timeout=x}\r
+\r
+Request Parameters:\r
+==================\r
+\r
++-------------+---------------------------------+------------------+------------+--------------+-------------+-------------+-------------------------------------------------+\r
+| Name        | Description                     |  Param Type      |  data type |   MaxLen     |  Req\92d      |  Format     |  Valid/Example Values                           |\r
+|                        |                                                             |                                  |            |              |             |             |                                                                                             |\r
++-------------+---------------------------------+------------------+------------+--------------+-------------+-------------+-------------------------------------------------+\r
+| Topicname   | topic name to be posted         |     Path         |   String   |        40    |     Y       | namespace.  |                                                                                            |\r
+|                        |                                                                     |                                  |            |              |             |  String     |                                                 |\r
++-------------+---------------------------------+------------------+------------+--------------+-------------+-------------+-------------------------------------------------+        \r
+|Consumergroup| A name that uniquely identifies |     Path         |    String  |              |             |             |                                                 |\r
+|                        | your subscriber's               |                  |            |              |      Y      |             |               CG1                               |\r
++-------------+---------------------------------+------------------+------------+--------------+-------------+-------------+-------------------------------------------------+\r
+| consumerId  | Within your subscriber's group, |                  |            |              |             |             |                                                 |\r
+|                        | a name that uniquely identifies |      Path        |   String   |              |       y     |             |              C1                                 |\r
+|                        | your subscriber's  process      |                  |            |              |             |             |                                                 |         \r
++-------------+---------------------------------+------------------+------------+--------------+-------------+-------------+-------------------------------------------------+\r
+| content-type| To specify type of message      |                  |            |              |             |             |aplication/json                                  |\r
+|                        | content(json,text or cambria)   |      Header      |   String   |         20   |      N      |             |                                                 |\r
+|                        |                                 |                  |            |              |             |             |                                                 |         \r
++-------------+---------------------------------+------------------+------------+--------------+-------------+-------------+-------------------------------------------------+\r
+|Username     |   userid                        | Header           | String     | 1            | N           |             |                                                 |\r
++-------------+---------------------------------+------------------+------------+--------------+-------------+-------------+-------------------------------------------------+\r
+| Password    |                                 | Header           | String     | 1            | N           |             |                                                 |\r
++-------------+---------------------------------+------------------+------------+--------------+-------------+-------------+-------------------------------------------------+       \r
+\r
+Note1: \r
+======\r
+Subscribers /user should have access on the topics. The user () and\r
+permissions details needs to be in AAF.\r
+\r
+Note 2:\r
+=======\r
+\r
+\r
+A few  consumer client app team who does continuous polling (by\r
+multiple rest calls) complained that they receive "503 consumer lock\r
+exception". The messages will not be lost from the topic when this\r
+exception occurs and it will be still in the topic. This happens when\r
+the concurrent rest call requests are made between several nodes in a\r
+cluster. Consumer lock is done at zookeeper level to ensure the offset\r
+for each consumer group is maintained to avoid losing the message in\r
+multiple concurrent calls of same consumer Group. We are looking\r
+otherways to resolve this issue. But for these continuous polling\r
+scenario, the suggested workaround is to ensure the request is made to\r
+only one node of the cluster. Session stickiness in DME2 is example of\r
+handling this. If this exception occurs , waiting for few minutes with\r
+out making api calls will release the lock in zookeeper.**\r
+\r
+Response Parameters:\r
+===================\r
+\r
++------------------+--------------------------------+------------+--------------+-----------------------------------------------------------+\r
+| Name             | Description                    |  Type      | Format       | Valid/Example Values                                      |\r
++==================+================================+============+==============+===========================================================+\r
+| httpStatusCode   |                                |            |              | 200, 201 etc.                                             |\r
++------------------+--------------------------------+------------+--------------+-----------------------------------------------------------+\r
+| mrErrorCode      | Numeric error code             |            |              | 200, 201 etc.                                             |\r
++------------------+--------------------------------+------------+--------------+-----------------------------------------------------------+\r
+| errorMessage     |                                |            |              | SUCCESS, or error message.                                |\r
++------------------+--------------------------------+------------+--------------+-----------------------------------------------------------+\r
+| helpURL          | helpurl                        |            |              |                                                           |\r
++------------------+--------------------------------+------------+--------------+-----------------------------------------------------------+\r
+| tranactionid     | transaction-id value           |            |              | 28-12-2015::08:18:50:682::135.25.227.66::28122015552391   |\r
++------------------+--------------------------------+------------+--------------+-----------------------------------------------------------+\r
+| ResponseBody     | Messages consumed from topic   | Json       | Json         |                                                           |\r
++------------------+--------------------------------+------------+--------------+-----------------------------------------------------------+\r
+\r
+\r
+\r
++---------------------------+------------------------------------+\r
+| Response statusCode       | Response statusMessage             |\r
++===========================+====================================+\r
+| 200-299                   | Success                            |\r
++---------------------------+------------------------------------+\r
+| 400-499                   | the client request has a problem   |\r
++---------------------------+------------------------------------+\r
+| 500-599                   | the DMaaP service has a problem    |\r
++---------------------------+------------------------------------+\r
+\r
+\r
+\r
++-------------------------+-----------------+----------------------------+----------------------------------------------------------------------------------------------------+\r
+| Error code              |  HTTP Code      |  Description               |Issue reason                                                                                        |\r
++-------------------------+-----------------+----------------------------+----------------------------------------------------------------------------------------------------+\r
+| DMaaP\_MR\_ERR\_3008    | 413             | Request Entity too large   | Message size exceeds the batch limit <limit>.Reduce the batch size and try again                   | +-------------------------+-----------------+----------------------------+----------------------------------------------------------------------------------------------------+\r
+| DMaaP\_MR\_ERR\_3009    | 500             | Internal Server Error      | Unable to publish messages. Please contact administartor                                           | +-------------------------+-----------------+----------------------------+----------------------------------------------------------------------------------------------------+\r
+| DMaaP\_MR\_ERR\_3010    | 400             | Bad Request                | Incorrect Batching format. Please correct the batching format and try again                        | +-------------------------+-----------------+----------------------------+----------------------------------------------------------------------------------------------------+\r
+| DMaaP\_MR\_ERR\_3011    | 413             | Request Entity too large   | Message size exceeds the message size limit <limit>.Reduce the message size and try again          | +-------------------------+-----------------+----------------------------+----------------------------------------------------------------------------------------------------+\r
+|  DMaaP\_MR\_ERR\_5012   | 429             | Too many requests          |  This client is making too many requests. Please use a long poll setting to decrease the number of |     |                         |                 |                            | requests that result in empty responses.                                                           |\r
++-------------------------+-----------------+----------------------------+----------------------------------------------------------------------------------------------------+\r
+|                         |  503            |  Service Unavailable       |  Service Unavailable                                                                               | +-------------------------+-----------------+----------------------------+----------------------------------------------------------------------------------------------------+\r
+\r
+\r
+\r
+\r
+\r