I'm trying to document an endpoint with API Blueprint, using the new Attributes and DataStructures sections of the spec.
My request payload looks like this:
{
"url": "http://requestb.in/11v7i7e1",
"active": true,
"types": [
{
"name": "sales",
"version": "2.0"
},
{
"name": "products",
"version": "2.0"
}
]
}
My response payload looks something like that:
{
"data": {
"id": "dc85058a-a683-11e4-ef46-e9431a15be8c",
"url": "http://requestb.in/11v7i7e1",
"active": true,
"types": [
{
"name": "products",
"version": "2.0"
},
{
"name": "sales",
"version": "2.0"
}
]
}
}
I tried the following API Blueprint markdown:
FORMAT: 1A
# Vend REST API 2.0
# Group Webhooks
## api/2.0/webhooks [/webhooks]
### List all Webhooks [GET]
Returns a list of Webhooks created by the authorised application.
+ Response 200 (application/json)
+ Attributes (Webhook Collection)
### Add a new Webhook [POST]
Creates a new Webhook.
+ Attributes (Webhook Base)
+ Request (application/json)
+ Attributes (Webhook Base)
+ Response 200 (application/json)
+ Attributes (Webhook Response)
# Data Structures
## Webhook Base (object)
+ url: https://example.com/webhook (string, required) - The address where webhooks requests should be submitted.
+ active: true (boolean, required) - This field can be used to inspect or edit state of the webhook.
+ types: array[Webhook Type] (array[Webhook Type], required) - Collection of Webhook types which should trigger Webhook event.
## Webhook Response Base (Webhook Base)
+ id: dc85058a-a683-11e4-ef46-e8b98f1a7ae4 (string, required) - Webhook `id`.
## Webhook Response (object)
+ data: webhook (Webhook Response Base, required)
## Webhook Type (object)
+ name: sales (string, required) - One of: products, sales, customers, taxes
+ version: 2.0 (string, required) - Version of the payload to be delivered. Currently the only supported value is "2.0".
## Webhook Collection (object)
+ data: array[Webhook Response Base] (array[Webhook Response Base], required) - An array of Webhook objects.
Now, when looking at it in Apiary, it tells me that this is a valid API Blueprint document, but it doesn't how me JSON previews for the request and response. Are structures like this even possible to represent in API Blueprint and able to render nicely in Apiary?
This is a combination of two problems:
The problem seems to be here:
## Webhook Collection (object)
+ data: array[Webhook Response Base] (array[Webhook Response Base], required) - An array of Webhook objects.
Looking at + data: array[Webhook Response Base] (array[Webhook Response Base])
. Basicaly when a value is expected (after the :
) a value should be provided. Instead – in this case – you have there a type array[Webhook Response Base]
.
Let me demonstrate on a simpler example:
+ data: number (array[number])
is incorrect.
Correct version would be
+ data: 42 (array[number])
or
+ data (array[number])
+ 42
or
+ data (array)
+ 42 (number)
Even if you would correct the blueprint it won't be rendered in Apairy. This is a bug we have discovered in our JSON renderer. It has been reported here https://github.com/apiaryio/drafter.js/issues/26 we plan to fix it ASAP.
This has been fixed now
FORMAT: 1A
# Vend REST API 2.0
# Group Webhooks
## api/2.0/webhooks [/webhooks]
### List all Webhooks [GET]
Returns a list of Webhooks created by the authorised application.
+ Response 200 (application/json)
+ Attributes (Webhook Collection)
### Add a new Webhook [POST]
Creates a new Webhook.
+ Attributes (Webhook Base)
+ Request (application/json)
+ Attributes (Webhook Base)
+ Response 200 (application/json)
+ Attributes (Webhook Response)
# Data Structures
## Webhook Base (object)
+ url: https://example.com/webhook (string, required) - The address where webhooks requests should be submitted.
+ active: true (boolean, required) - This field can be used to inspect or edit state of the webhook.
+ types (array[Webhook Type], required) - Collection of Webhook types which should trigger Webhook event.
## Webhook Response Base (Webhook Base)
+ id: dc85058a-a683-11e4-ef46-e8b98f1a7ae4 (string, required) - Webhook `id`.
## Webhook Response (object)
+ data (Webhook Response Base, required)
## Webhook Type (object)
+ name: sales (string, required) - One of: products, sales, customers, taxes
+ version: 2.0 (string, required) - Version of the payload to be delivered. Currently the only supported value is "2.0".
## Webhook Collection (object)
+ data (array[Webhook Response Base], required) - An array of Webhook objects.
Hope this answers your question. Please let me know if a further clarification is needed.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With