6

我想问一下RAML中是否支持 POST 参数。如果有 - 语法是什么。我大致浏览了 spec 0.8和 spec 1.0(实际上我一定会0.8,因为许多工具还不支持1.0)。我没有找到 POST 参数支持,但也许我只是错过了一些东西。

那么我所说的 POST 参数是什么意思呢?这些可以是两者中的任何一个(对不起,我不知道他们的正式名称,如果有的话):

  • HTTP明文参数,,,每个key=value参数一行,如

    name=John Doe amount=5 这不是很方便(例如没有嵌套)

  • 参数作为 JSON 对象,只是一个允许其所有语法的 JSON(服务器端需要解析这个 json);如:

    {"name":"John Doe","amount":"5"}

不同的服务器端 API 实现使用第一个或第二个。无论如何,RAML 如何支持这些?

4

3 回答 3

7

如本参考资料所示https://github.com/raml-org/raml-spec/wiki/Breaking-Changes

对于 raml 0.8:

body:
  application/x-www-form-urlencoded:
    formParameters:
      name:
        description: name on account
        type: string
        example: Naruto Uzumaki
      gender:
        enum: ["male", "female"]

在 raml 1.0 中等效于:

body:
  application/x-www-form-urlencoded:
    properties:
      name:
        description: name on account
        type: string
        example: Naruto Uzumaki
      gender:
        enum: ["male", "female"]

所以它改变的是属性一的 formParameters 属性。

于 2016-11-26T15:06:42.530 回答
6

@Pedro 已经涵盖了选项 2,所以这里是选项 1。根据评论中的讨论,使用的编码似乎是application/x-www-form-urlencoded.

你需要使用formParameters.

例子:

  post:
    description: The POST operation adds an object to a specified bucket using HTML forms.
    body:
      application/x-www-form-urlencoded:
        formParameters:
          AWSAccessKeyId:
            description: The AWS Access Key ID of the owner of the bucket who grants an Anonymous user access for a request that satisfies the set of constraints in the Policy.
            type: string
          acl:
            description: Specifies an Amazon S3 access control list. If an invalid access control list is specified, an error is generated.
            type: string

参考:https ://github.com/raml-org/raml-spec/blob/master/raml-0.8.md#web-forms

于 2016-02-18T16:26:46.163 回答
4

Post 参数可以使用JSON Schema表示

一个简单的 RAML 0.8 示例:

#%RAML 0.8
title: Api
baseUri: /
schemas:
  - Invoice: |
    { 
      "$schema": "http://json-schema.org/draft-03/schema",
      "type": "object",
      "properties": {
        "Id": { "type": "integer"},
        "Name": { "type": "string"},
        "Total": { "type": "number"}
      }
    }
/invoices:
  post:
    body:
      application/json:
        schema: Invoice
于 2016-02-17T13:20:31.343 回答