1

我正在尝试使用 apiary(apiblueprint)创建我的 api,但是当我将发布数据发送到我的端点时,我总是得到 201 响应。但是端点需要一些参数,所以当我发送空帖子时,我应该收到一些错误消息。我该怎么做?

### Create a New Question [POST]

+ question `Some text message` (string, required)

+ Request (application/json)

    {
        "question": "Favourite programming language?",
        "choices": [
            "Swift",
            "Python",
            "Objective-C",
            "Ruby"
        ]
    }

+ Response 201 (application/json)

    + Headers

        Location: /questions/2

    + Body

        {
            "question": "Faavourite programming language?",
            "published_at": "2015-08-05T08:40:51.620Z",
            "choices": [
                {
                    "choice": "Swift",
                    "votes": 0
                }, {
                    "choice": "Python",
                    "votes": 0
                }, {
                    "choice": "Objective-C",
                    "votes": 10
                }, {
                    "choice": "Ruby",
                    "votes": 0
                }
            ]
        }
4

1 回答 1

2

如果您将 POST 请求发送到 Apiary 的模拟服务器,您将获得在 API 蓝图中为该端点指定的第一个响应。这意味着即使它与您的数据结构不匹配,您的示例中也将始终得到 201。

但是,Apiary 会检查您的请求并确保它与您的数据结构和模式匹配,让您知道它在哪里无效。

您的请求在 JSON 中包含一个 question 参数,并且 Apiary 将确保在发出请求时它就在那里。但是,它将将此行视为您的操作的描述,并且在检查时不使用它:

+ question `Some text message` (string, required)

定义数据结构的推荐方法是使用MSON,如下所示(注意我没有将响应转换为 MSON,只有请求):

### Create a New Question [POST]

+ Request (application/json)
    + Attributes
        + question (string, required)
        + choices (array, optional)
            - Swift
            - Python
            - Objective-C
            - Ruby

+ Response 201 (application/json)

    + Headers

            Location: /questions/2

    + Body

            {
                "question": "Favourite programming language?",
                "published_at": "2015-08-05T08:40:51.620Z",
                "choices": [
                    {
                        "choice": "Swift",
                        "votes": 0
                    }, {
                        "choice": "Python",
                        "votes": 0
                    }, {
                        "choice": "Objective-C",
                        "votes": 0
                    }, {
                        "choice": "Ruby",
                        "votes": 0
                    }
                ]
            }

如果您使用此示例,请在忽略属性的同时向模拟服务器发出请求question,然后查看“Inspector”选项卡,您将看到该question属性被忽略的注释。

缺少问题属性

虽然 MSON 是我们推荐的定义数据结构的方法,但您也可以使用JSON Schema来定义您的语义。

于 2016-03-04T03:30:49.697 回答