我正在开展我的第一个Apigility项目,而且文档并没有与我们以前的开发人员排在一起。'做事的方式,所以我对如何做一些事情感到困惑(其中一些似乎也不适合Apigility'首选'做事的方式)。
例如,我尝试设置一个端点,该端点需要5个必需的变量/值,其中第一个是" ID"但是转到第三方数据源,其中其他参数用于不同的表而不是ID(所以说2个参数转到第2个表,另外2个参数转到第3个表)。
所以,我不能将端点设置为" / / info [/:id]",它需要通过所有5个参数,我只需要那些参数和将它们提交给第三方数据源并获取我格式化的一些数据,以便响应我们用户的前端UI。
我一直在玩,Apigility似乎对事情应该是如此挑剔,所以我很困惑这是否更适合使用GET或POST请求的REST或RPC ...我&#39 ; d更喜欢不通过URL发送的值(无论如何都通过https加密的AJAX调用),但除非我不确定这应该是哪种格式(无需使用Mapper或a使用资源服务。
答案 0 :(得分:1)
我在这里给出一个简短的类比,我们应该何时使用RPC
或REST
。
REST 代表具象状态转移,主张Web应用程序使用最初设想的HTTP。查找应使用 GET 请求。 PUT / PATCH , POST 和 DELETE 请求应该用于创建,变异和删除。 REST API资源通常是名词,这个REST用法与 CRUD相同
示例:
我们想为Book
对象创建API资源。此资源用于Book
CRUD 。因此,我们可以选择此方法(REST)来创建API资源。
这意味着api将像这样访问
GET http://example.com/api/v1/book
GET http://example.com/api/v1/book/1
POST http://example.com/api/v1/book
PATCH http://example.com/api/v1/book/1
DELETE http://example.com/api/v1/book/1
我们可以在REST中使用其他参数,例如https://example.com/api/v1/book/?param1=1¶m2=2
吗?
是的,我们可以!通常我们会为filtering
和sorting
GET
结果使用其他参数。但它为另一个目的而开放。请在collection_query_whitelist
子键中查看此文档。
https://apigility.org/documentation/modules/zf-rest#name=user-configuration
RPC 代表远程过程调用。在Apigility中,它意味着RPC Web服务。 RPC API资源通常是动词,就像函数名一样。我们可以自由地为此RPC使用HTTP方法(不像REST,HTTP方法描述操作)。
示例:
我们想为User
注册创建API资源。此资源用于创建新用户到数据库,但我们不需要对User
对象进行CRUD操作。对于这种情况,选择RPC比Apigility中的REST更合适。因此,我们可以创建名为register
的RPC资源,并使用POST
HTTP方法。
POST https://example.com/api/v1/register
我希望这个简短的类比可以帮助您理解REST和RPC之间的区别,以及何时使用它们。