我正在开展一个项目,我正在尝试公开该软件的功能。基本上我有我的后端设置,并考虑使用JSON消息从后端代码中分离前端。关于服务和API之间的区别,我有点困惑。我知道API可以在服务上构建。但我想到了这两个模型 - 使用json-rpc
访问配置文件X.http://xyz.com/?request= {“jsonrpc”:“2.0”,“id”:1,“method”:“getProfile”,“params”:{“id”:“X”}}
或者它应该是这样使用REST -
谢谢
答案 0 :(得分:21)
“服务”与“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做任何事情,您都会向同一网址发送请求。这个想法有例外和变体,但这就是它的关键。
RPC服务更像是使用一个绑定到特定URL的函数库。您可能有一大堆相关函数都绑定到URL /services/json
。然后,如果您想更改旧Davey Jones的个人资料,您可以:
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指定您喜欢的任何数据格式。它不是刻在石头上。
答案 1 :(得分:0)
您的REST URL不等于您的JSON-RPC请求。
至少它应该是http://api.example.org/getProfile?id=X
两者之间确实没有太大区别。并且您的“REST”不是真正的REST,除非您返回可靠地表达到不同URL的链接的数据格式,例如XML或(X)HTML。在满足此要求之前,您应该只将其称为“RESTful”,因为您实际上只使用HTTP方法来触发内容并来回移动数据。
使用什么并不重要 - 除非您了解或拥有支持您构建一个或另一个解决方案的软件经验,而不是另一个。