Дредд передает заднюю квадратную скобку в API
Я использую Dredd для тестирования API, который я написал. Это работает нормально, пока я не попытаюсь изменить действие URI в ресурсе. Когда у меня есть действие в форме
## Retrieve Task [GET /task/{id}]
он отправляет запрос Дракову с ]
прилагается. Этот сервер Drakov выполняет документ проекта.
Drakov 0.1.16 Listening on port 8090
[LOG] GET /task/myid]
[LOG] DELETE /task/myid]
[LOG] GET /task/myid]
Вы можете увидеть этот запрос имеет дополнительный ]
в конце.
Это мой план. Это подмножество примера из примеров Api Blueprint:
FORMAT: 1A
# Advanced Action API
A resource action is – in fact – a state transition. This API example demonstrates an action - state transition - to another resource.
## API Blueprint
# Tasks [/tasks/tasks{?status,priority}]
+ Parameters
+ status `test` (string)
+ priority `1` (number)
## Retrieve Task [GET /task/{id}]
This is a state transition to another resource
+ Parameters
+ id: `myid` (string)
+ Response 200 (application/json)
{
"id": 123,
"name": "Go to gym",
"done": false,
"type": "task"
}
Что я делаю неправильно?
1 ответ
Ваш API Blueprint содержит несколько ошибок. Например,
+ Parameters
+ status `test` (string)
+ priority `1` (number)
...должно быть:
+ Parameters
+ status: `test` (string)
+ priority: `1` (number)
Также вы определяете ресурс Tasks
с шаблоном URI /tasks/tasks{?status,priority}
а затем вы пытаетесь определить GET
действие для ресурса с другим шаблоном URI. Это сбивает с толку.
Я пытался создать образец API Blueprint (сохранен как sample-blueprint.md
) как это:
FORMAT: 1A
# My API
## Task [/task/{id}]
### Retrieve Task [GET]
+ Parameters
+ id: `123` (string)
+ Response 200 (application/json)
{
"id": 123,
"name": "Go to gym",
"done": false,
"type": "task"
}
Затем я запустил сервер Drakov в одном терминале следующим образом:
drakov -f *.md
Затем я попытался запустить Dredd:
dredd sample-blueprint.md http://localhost:3000
Все прошло правильно:
$ dredd sample-blueprint.md http://localhost:3000
info: Beginning Dredd testing...
pass: GET /task/123 duration: 42ms
complete: 1 passing, 0 failing, 0 errors, 0 skipped, 1 total
complete: Tests took 50ms
Это то, чего вы изначально хотели достичь?