1

我正在尝试使用 RAML 来具体描述各种加密货币交换 API 它们都使用不同的格式(非标准化)来呈现和记录其 API。我很容易为 RESTful API 执行此操作(因为据我了解,这主要是 RAML 的用途),但对于使用 JSON-RPC over https 的 API 执行此操作却很困难。

首先...这可能和/或可行吗?

如果可能和/或可行,以下是正确的方法吗?这似乎是有限的,因为我不知道枚举可能的方法及其各自参数的方法,我只能声明有一个方法参数。

正如 David Dossot 所建议的那样,我尝试使用 JSON 模式而不是 queryParameters。这是我的尝试(我仍然没有看到枚举/描述 API 的各个方法的方法,我只能表示有一个方法关键字并且它是一个字符串(类似于我对查询参数路由)。

#%RAML 0.8

title: BTC-China API
baseUri: https://data.btcchina.com/data/

baseUri: https://api.btcchina.com/api_trade_v1.php

/api_trade_v1.php:
  post:
    description: The JSON-RPC BTC-China API.
    headers:
      Authorization:
        description: |
          Blah blah

        example: Basic PGFjY2Vzc2tleT46PGhhc2g+
    body:
      application/json:
        schema: |
          {
           "$schema" : "http://json-schema.org/draft-04/schema#",
           "title": "JSON-RPC Request",
           "description" : "A JSON-RPC request to the BTC-China API.",

           "type" : "object",
           "required" : ["jsonrpc", "method"],
           "properties" : {
             "jsonrpc" : { "enum" : ["2.0"] },
             "method" : {
               "type" : "string"
              },
              "id" : {
                "type" : "number"
              },
              "params" : {
                "type" : ["array", "object"]
              }
            }
          }

    responses:
       200:
          body:
            application/json:
              example: |
                {"result":12345,"id":"1"} 

        401:
          body:
            text/plain:
              example: 401 Unauthorized - invalid access key

现在我正在使用模式,但我仍然看不到可以枚举或描述 API 的各个方法的方法。

2014 年 8 月 13 日更新:

尝试使用 JSON $refs 和子模式(仍然遇到如何将方法与其关联参数链接以及如何描述方法等问题,因为 JSON Schema v4 只有 3 个字符串验证参数(类型该方法在 JSON-RPC 中,它不是对象)、maxLength、minLength 和模式。没有足够的表达力来解释该方法是/做什么以及它的选项/可用参数)

body:
  application/json:
    schema: |
      {
       "$schema" : "http://json-schema.org/draft-04/schema#",
       "title": "JSON-RPC Request",
       "description" : "A JSON-RPC request to the BTC-China API.",

       "type" : "object",
       "required" : ["jsonrpc", "method"],
       "properties" : {
         "jsonrpc" : {
           "enum" : ["2.0"]
         },
         "method" : {
           "type" : "string",
           "oneOf" : [
               { "$ref": "#/definitions/getbalance" },
               { "$ref": "#/definitions/withdrawal" },
               { "$ref": "#/definitions/depositaddress" }
             ]
          },
          "id" : {
            "type" : "number"
          },
          "params" : {
            "type" : ["array", "object"]
          }
        }
        "definitions" : {
          "getbalance": {},
          "withdrawal": {},
          "depositaddress": {}
      }
4

2 回答 2

1

不要queryParameters用于尝试描述 JSON-RPC 协议中使用的 JSON 主体实体,而是使用 JSON Schema。

阅读本文也可能有所帮助: http: //www.jsonrpc.org/historical/json-schema-service-descriptor.html

于 2014-08-12T15:47:32.800 回答
0

你可以用另一种规范来描述你的 JSON RPC 服务:

RAML 功能非常强大,并且对于常见用途来说过度工程化。例如,使用 JSON-WSP 怎么样?

于 2017-12-08T19:47:33.447 回答