Web服务 - REST与PHP JSON RPC

Fox*_*Fox 6 php api rest rpc json

我正在研究一个项目,我试图揭示该软件的功能.基本上我有我的后端设置,并考虑使用JSON消息从后端代码中分离前端.关于服务和API之间的区别,我有点困惑.我知道API可以在服务上构建.但我想到了这两个模型 - 使用json-rpc访问配置文件X.

http://xyz.com/?request= {"jsonrpc":"2.0","id":1,"method":"getProfile","params":{"id":"X"}}

或者它应该像这样使用REST -

http://api.xyz.com/X

谢谢

sla*_*pon 21

"服务"与"API"是一个相当模糊的问题.通常,这两个术语可互换使用."REST"vs"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
Run Code Online (Sandbox Code Playgroud)

如果你想对用户1125做任何事情,你会向同一个URL发送请求.这个想法有例外和变体,但这是它的关键.

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"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我个人更喜欢JSON-RPC,因为:

  • 我不必尝试将所有函数调用都放入某种可能没有意义的资源到URL映射中
  • 我们不会尝试重载HTTP响应代码以指示API错误.每个请求都返回200响应(除非出现服务器错误),并且您从响应正文得知您是否收到错误.JSON-RPC特别擅长明确错误条件.

有时REST更好,因为:

  • 有时,资源到URL的映射非常适合
  • 第三方更容易理解
  • 它提供了一种更简单的模型,可以只检索易于识别的信息

我不认为任何一个更容易编码.

编辑我更改了REST示例以使用更常见的表单编码数据而不是JSON.但是,您当然可以使用REST指定您喜欢的任何数据格式.它不是刻在石头上.