我正在开展一个项目,尝试公开软件的功能。基本上,我已经设置好了后端,并考虑使用JSON消息将前端代码与后端代码分离。我有一点困惑,不知道服务和API之间有什么区别。我知道API可以建立在服务的基础上。但是我有这两个模型--使用json-rpc访问配置文件X。
http://xyz.com/?request={"jsonrpc":"2.0","id":1,"method":"getProfile","params":{"id":"X"}}
还是应该像这样使用REST吗 -
谢谢您
我正在开展一个项目,尝试公开软件的功能。基本上,我已经设置好了后端,并考虑使用JSON消息将前端代码与后端代码分离。我有一点困惑,不知道服务和API之间有什么区别。我知道API可以建立在服务的基础上。但是我有这两个模型--使用json-rpc访问配置文件X。
http://xyz.com/?request={"jsonrpc":"2.0","id":1,"method":"getProfile","params":{"id":"X"}}
还是应该像这样使用REST吗 -
谢谢您
“服务(Service)”与“应用程序编程接口(API)”是一个相当模糊的问题。通常这两个术语可以互换使用。“REST”与“RPC”则稍微容易解释一些。
通常情况下,REST中,URL表示特定资源,例如“用户”、“帐户”等。通常可以使用HTTP方法POST / GET / PUT / DELETE来创建/检索/更新/删除这些资源。要更新用户1125的配置文件,您可能会发送以下信息:
POST /user/1125 HTTP/1.1
Host: wherever.com
Content-type: application/x-www-form-urlencoded
firstName=Davey&lastName=Jones&email=dj%40thebrineydeep.com
如果您想对用户1125进行任何操作,都需要向相同的URL发送请求。虽然有一些例外和变体,但这就是关键所在。
RPC服务更像是使用函数库,该库绑定到特定的URL。您可能会有一堆相关的函数都绑定到URL /services/json
。然后,如果您想更改旧戴维·琼斯的个人资料,您需要执行以下操作:
POST /services/json HTTP/1.1
Host: wherever.com
Content-type: application/json
{ "jsonrpc": "2.0",
"id": 1,
"method": "setProfile",
"params": [ 1125,
{ "firstName": "Davey",
"lastName": "Jones",
"email": "dj@thebrineydeep.com"
}
]
}
我个人更喜欢 JSON-RPC,因为:
有时候REST更好,因为:
我认为编写代码都一样难。
编辑 我将REST示例更改为使用更常见的表单编码数据而不是JSON。但是当然,您可以使用任何数据格式指定REST。 它没有被刻意固定死。
您的REST URL与JSON-RPC请求不匹配。
至少应该是http://api.example.org/getProfile?id=X
两者之间实际上没有太大的区别。除非您返回可靠地表达到不同URL链接的数据格式,例如XML或(X)HTML,否则您的“REST”并不是真正的REST。在满足此要求之前,您只能称其为“RESTful”,因为您实际上只使用HTTP方法来触发操作并在不同URL之间移动数据。
您使用什么并不重要-除非您知道或具有支持您更快地构建一种解决方案而不是另一种解决方案的软件的经验。