【问题标题】:Using RAML to describe a JSON-RPC service over HTTPS使用 RAML 描述基于 HTTPS 的 JSON-RPC 服务
【发布时间】:2014-08-11 06:16:14
【问题描述】:

我正在尝试使用 RAML 来具体描述各种加密货币交换 APIwho,它们都使用不同的格式(非标准化)来呈现和记录其 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": {}
      }

【问题讨论】:

  • 您是否通过 RAML 解析器/验证器运行此程序?多个 baseUri 元素看起来不正确。
  • 啊,这是实验中的错误,谢谢...我已经删除了!
  • 我从 queryParameters 更改为架构,但仍然遇到同样的问题。
  • 您可以使用oneOf 选择一个子架构,每个特定请求一个。见:json-schema.org/example2.html
  • 首先,David 我要衷心感谢您为回答我的所有问题并与我保持一致所付出的努力。为此,我肯定会将您的答案标记为“答案”。根据我们的发现,我将在我的应用程序和交易所之间添加一个元层。这将采用 JSON 文件的形式,该文件指定交换名称、交换 API 版本和交换 API 类型,其中类型可以是 REST、JSON-RPC 以及“在野外”弹出的任何其他内容。然后根据类型,它会根据其类型具有 RAML 或 JSON-WSP。

标签: json rest https json-rpc raml


【解决方案1】:

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

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

【讨论】:

  • 我知道使用 JSON Schema 来描述 JSON-RPC API 是一种很好的方法。但是,它根本没有解决我最初的问题:是否可以用 RAML 描述 JSON-RPC API(通过 https)?如果可能的话,我在正确的轨道上发布的代码 sn-p 是否可以这样做。我不是在问如何使用各种描述语言来描述 JSON-RPC API 的一般问题,我问的是如何使用 RAML (raml.org) 这样做的具体问题。
  • JSON Schema 是 RAML 的一部分:由于您没有在上述规范中使用它,我认为提及它是相关的,因为您似乎不打算使用它。
  • 好的,对不起,我的误解。您建议使用 RAML 的 JSON Schema 方面来描述此 JSON-RPC API...有趣 =)...作为参考,API 规范在这里:btcchina.org/api-trade-documentation-en 如果您有时间,可以给我看一个例如,通过在 RAML 中使用 JSON Schema 描述一种方法(比如存款、取款或其他方法),这将使我开始运行。非常感谢。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    • 2014-11-17
    • 2014-02-03
    • 2013-10-10
    • 2012-08-19
    • 2010-09-05
    相关资源
    最近更新 更多