如何将“命令”发送到RESTful服务器?
用例:我的服务器缓存某些信息,以便每次请求信息时都不必读取数据库。我需要一种方法从我的客户端应用程序发送命令,告诉服务器刷新缓存。您会在“POST
”等某些网址上使用PUT
或.../flush_cache
吗?
“命令”实际上不是需要“Representational State Transfer”的数据,除非被传输的状态是命令的结果 - “开关关闭”,“缓存被刷新”等。作为一般规则,REST如何向服务器发送命令?
答案 0 :(得分:69)
我在过去的项目中遇到过很多这样的情况。由于REST很好......关于资源,因此并不总是清楚如何处理真正具有RPC的东西。
解决这个问题的一个简单方法是将其视为休息的官僚部分,请求可以是资源本身:
1。 “你想在我的服务器上触发命令?首先填写此表格I90292并发送给我们”:
POST /bureaucracy/command-request
Content-Type: application/x-www-form-urlencoded
Content-Length: ...
“好的,我们会看到我们能做什么。你的案件编号是999”
201创建(或根据Kugel的评论接受202) 位置/官僚/命令请求/ 999
然后客户定期检查
GET / bureaucracy / command-request / 999
希望他得到如下的回复
200 OK
<command-request>
<number>999</number>
...
<result>Success</result>
</command-request>
当然,如果官僚服务有很好的客户服务,那么如果他愿意,它会让顾客给他打电话:
“您想在我们的服务器上触发命令吗?请填写此表格并发送给我们。请注意,您可以加入您的联系信息,以便我们可以在完成后给您打电话”
POST /bureaucracy/command-request?callback=client.com/bureaucracy/inbox
或作为自定义http标头X-Callback: http://client.com/bureaucracy/inbox
答案 1 :(得分:15)
我建议:
http://server.example/results/00001
),可能具有204(无内容)状态和Location标头或重定向(取决于哪个客户可以理解)。由您决定结果资源的生命周期。如果您不需要长时间存储结果,它可能是短暂的。例如,URI可以从UUID构造。
答案 2 :(得分:5)
在您的情况下,为什么不将cache
作为资源?
DELETE /cache
当你想要冲洗它时。
POST /cache
当你想要创建一个新的。
或者将前两个组合成以下内容:
DELETE /cache?autorecreate=true