使用RAML描述HTTPS上的JSON-RPC服务
我试图使用RAML来具体描述各种加密货币交换API,它们都使用不同的格式(非标准化)来呈现和记录它们的API。对于RESTful API,我很容易做到这一点(据我所知,这主要是RAML的作用),但对于使用JSON-RPC over https的API,我很难做到这一点 首先……这是否可能和/或可行 如果可能和/或可行,以下方法是否正确?这似乎是有限制的,因为我不知道如何枚举可能的方法及其各自的参数,我只能声明存在一个方法参数 正如David Dossot所建议的,我尝试使用JSON模式而不是queryParameters。这是我的尝试(我仍然看不到枚举/描述API的各个方法的方法,我只能表示有一个method关键字,它是一个字符串(类似于我对queryParameters路由的限制) 现在我使用的是模式,我仍然看不到一种方法可以枚举或描述API的各个方法 2014年8月13日更新: 尝试使用JSON$refs和子模式(仍然遇到如何将方法与其相关参数链接以及如何描述方法等问题,因为JSON模式v4对于字符串只有3个验证参数(该方法在JSON-RPC中的类型,它不是对象),maxLength,minLength和pattern。没有一个足够的表达能力来解释该方法是/做什么以及该方法的选项/可用参数)使用RAML描述HTTPS上的JSON-RPC服务,json,rest,https,json-rpc,raml,Json,Rest,Https,Json Rpc,Raml,我试图使用RAML来具体描述各种加密货币交换API,它们都使用不同的格式(非标准化)来呈现和记录它们的API。对于RESTful API,我很容易做到这一点(据我所知,这主要是RAML的作用),但对于使用JSON-RPC over https的API,我很难做到这一点 首先……这是否可能和/或可行 如果可能和/或可行,以下方法是否正确?这似乎是有限制的,因为我不知道如何枚举可能的方法及其各自的参数,我只能声明存在一个方法参数 正如David Dossot所建议的,我尝试使用JSON模式而不是qu
不要使用
queryParameters
试图描述JSON-RPC协议中使用的JSON主体实体,而是使用JSON模式
阅读本文也可能会有所帮助:您可以使用另一个规范描述JSON RPC服务:
RAML的功能非常强大,对于普通用途来说过于工程化。例如,使用JSON-WSP如何?我知道使用JSON模式来描述JSON-RPC API是一种很好的方法。但是,它根本没有解决我最初的问题:是否可以描述JSON-RPC API(通过https)使用RAML?如果可能的话,我发布的代码片段是否正确。我不是问如何使用各种描述语言描述JSON-RPC API的一般问题,而是问如何使用RAML()来描述JSON-RPC API的具体问题.JSON模式是RAML的一部分:由于您在上述规范中没有使用它,我认为应该提及它,因为您似乎不打算使用它。好的,很抱歉我的误解。您建议使用RAML的JSON模式方面来描述此JSON-RPC API…有趣=)…作为参考,API规范在这里:如果您有时间,如果您可以向我展示一个示例,通过在RAML中描述使用JSON模式的其中一种方法(如存款、取款等),这将使我开始运行。非常感谢。您是否已通过RAML解析器/验证器运行了此功能?多个
baseUri
元素看起来不正确。啊,这是实验中的一个错误,谢谢……我已经删除了它!我已将queryParameters更改为架构,但仍然存在相同的问题。您可以使用oneOf
选择子架构,每个特定请求一个子架构。首先,大卫,我要真诚地感谢你为回答我的所有问题所做的努力,并与我保持一致。因此,我当然会把你的答案标记为“答案”。根据我们的发现,我将在我的应用程序和exchange之间添加一个元层。这将采用JSON文件的形式,指定exchange名称、exchange API版本和exchange API类型,其中类型可以是REST、JSON-RPC以及“在野外”弹出的任何其他内容。然后,根据类型的不同,它将具有RAML或JSON-WSP,具体取决于它的类型。
#%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
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": {}
}