REST API使用POST而不是GET
假设一个服务提供了一些我可以使用的funcionality:
GET /service/function?param1=value1¶m2=value2
说我可以在POST查询中使用它是否正确?
POST /service/function { param1 : value1, param2 : value2 }
这两个查询是一样的吗? 我可以在任何情况下使用第二个变体,或者文档应该明确说我可以同时使用GET和POST查询?
如果不使用这些方法进行构建以独立调用,则无法使用POST
或GET
使用API
。 就像你的API说的那样
/service/function?param1=value1¶m2=value2
通过使用GET
方法访问。 然后,如果创建者未将其指定为POST
方法,则无法使用POST
方法调用它。 如果你这样做,你可能会得到405 Method not allowed
状态。
通常在POST
方法中,您需要以指定的格式发送内容,该格式在content-type
标头中描述为ex。 application/json
for json数据。
之后,请求主体在服务器端得到反序列化。 因此,您需要从客户端传递序列化的数据,并由服务开发人员决定。
但是一般来说,当服务器向客户端返回一些数据并且对服务器没有任何影响时使用GET
,而POST
用于在服务器上创建一些资源。 所以通常它不应该是一样的。
只是为了回顾一下, REST
具有某些开发者为了使其RESTful
应遵循的特性:
什么是REST?
根据维基百科:
REST体系结构风格描述了应用于体系结构的以下六个约束条件,同时使各个组件的实现免于设计:
动词应该做什么
所以用户Daniel Vasallo在解决这个问题的过程中做了很好的工作:理解REST:动词,错误代码和认证 :
处理Collection URI时:http://example.com/resources/
GET:列出集合的成员,并附上其成员URI以供进一步导航。 例如,列出所有待售汽车。
PUT:含义定义为“用另一个集合替换整个集合”。
POST:在由集合自动分配ID的集合中创建一个新条目。 创建的ID通常包含在此操作返回的数据中。
DELETE:含义定义为“删除整个集合”。
所以,要回答你的问题:
说我可以在POST查询中使用它是否正确? ...
这两个查询是一样的吗? 我可以在任何情况下使用第二个变体,或者文档应该明确说我可以同时使用GET和POST查询?
如果您正在编写一个普通的旧的RPC API调用,只要处理服务器端在两个调用之间没有区别,就可以在技术上互换。 但是,为了使调用成为RESTful,通过GET
方法调用端点应具有明确的功能(即从POST
方法(即创建新资源)获取资源)。
附注:有一些关于POST
是否应该被允许用来更新资源的讨论......尽管我没有对此进行评论,但我只是告诉你一些人在这一点上有问题。
由于以下原因,我使用POST正文来处理任何不平凡的行业应用程序:
顺便说一句,我也把字段返回到我的POST正文,因为我可能不希望公开我的字段名称。 安全就像洋葱; 许多层,让我们哭泣!
链接地址: http://www.djcxy.com/p/45343.html