正确的RESTful方式来处理不是真正创建或获取内容的请求?
我正在编写一个小应用程序,它只做一件事:获取一些用户提供的数据,对其进行一些分析,然后为这些数据返回一个“标记”。我认为客户应该正确的RESTful方式来处理不是真正创建或获取内容的请求?,rest,Rest,我正在编写一个小应用程序,它只做一件事:获取一些用户提供的数据,对其进行一些分析,然后为这些数据返回一个“标记”。我认为客户应该获取或者将他们的请求发布到/getTag,以便获得回复 当客户端执行此操作时,服务器上没有存储任何内容,因此使用POST感觉很奇怪。但是,分析也没有统一的URI,因此使用GET感觉很奇怪,因为它将根据提供的数据返回不同的内容 用REST表示此功能的最佳方式是什么?POST可以表示执行某个操作。该操作不必是数据库操作 您真正创建的是一个远程过程。RPC通常都是POST。我
获取
或者将他们的请求发布到/getTag
,以便获得回复
当客户端执行此操作时,服务器上没有存储任何内容,因此使用POST感觉很奇怪。但是,分析也没有统一的URI,因此使用GET感觉很奇怪,因为它将根据提供的数据返回不同的内容
用REST表示此功能的最佳方式是什么?POST可以表示执行某个操作。该操作不必是数据库操作
您真正创建的是一个远程过程。RPC通常都是POST。我认为这不适合REST,但这并不一定会阻止您使用简单的URL和JSON 最好的方法是做最适合您的应用程序及其需求的事情。不知道这一点,以下是一些想法:
GET
是最合适的动词,因为您不是在服务器上创建或存储任何内容,而是检索服务器提供的内容
不要像你建议的那样在URI中添加单词get
。HTTP已经提供了类似的动词,所以只需使用/tag
和GET
即可
您应该对此资源使用一个易于理解的(或“酷”)URI,并将数据作为查询参数传递。我不担心会觉得奇怪(请参阅答案以了解原因)
总而言之,只要在/tag?foo=bar&beef=dead
上获取,您就完成了。在我看来,您或生成原始数据的用户可能会希望生成的标记保持不变,不是吗
如果有可能的话,那么我将把它写为POST/tags
,并将/tags/:id
资源URI作为Location:header传回
如果我真的不关心持久化生成的标记,我会考虑“用户生成的数据”是什么,以及在幕后进行了多少处理。如果“标记”与传递到系统中的任何数据都有足够的不同,那么对于API消费者来说,GET/tag
可能会让人困惑。我支持Brian的回答:使用GET
。如果相同的输入参数返回相同的输出,并且您没有真正创建任何内容,那么这是一个幂等操作,因此非常适合GET
您可以使用GET
和POST
:
GET/tag?data=“…”->200,tag
GET方法意味着检索任何信息(以
实体)由请求URI标识。如果请求URI引用
一个数据生成过程,它是生成的数据
作为响应中的实体返回,而不是
进程,除非该文本恰好是进程的输出
POST/tag{data:“…”}->200,tag
POST方法执行的操作可能不会生成资源
可以由URI标识的。在这种情况下,200(正常)或204
(无内容)是适当的响应状态,具体取决于
响应是否包含描述结果的实体
根据HTTP标准/章节
如果我是你,我会使用GET
(如果你想发送文件,我会使用POST
)