RESTful方式发送命令

时间:2010-08-12 13:32:31

标签: rest web-applications

如何将“命令”发送到RESTful服务器?

用例:我的服务器缓存某些信息,以便每次请求信息时都不必读取数据库。我需要一种方法从我的客户端应用程序发送命令,告诉服务器刷新缓存。您会在“POST”等某些网址上使用PUT.../flush_cache吗?

“命令”实际上不是需要“Representational State Transfer”的数据,除非被传输的状态是命令的结果 - “开关关闭”,“缓存被刷新”等。作为一般规则,REST如何向服务器发送命令?

3 个答案:

答案 0 :(得分:69)

我在过去的项目中遇到过很多这样的情况。由于REST很好......关于资源,因此并不总是清楚如何处理真正具有RPC的东西。

解决这个问题的一个简单方法是将其视为休息的官僚部分,请求可以是资源本身:

1。 “你想在我的服务器上触发命令?首先填写此表格I90292并发送给我们”:

POST /bureaucracy/command-request 
Content-Type: application/x-www-form-urlencoded
Content-Length: ...
  1. “好的,我们会看到我们能做什么。你的案件编号是999”

    201创建(或根据Kugel的评论接受202) 位置/官僚/命令请求/ 999

  2. 然后客户定期检查

    GET / bureaucracy / command-request / 999

  3. 希望他得到如下的回复

    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)

我建议:

  • 创建一个可以GET的资源,如果对此命令有副作用,它将告诉客户端如何使用POST发送命令(类似于HTML表单)。
  • POST到资源以触发命令并将URI返回到您在执行此POST请求期间创建的新资源(例如http://server.example/results/00001),可能具有204(无内容)状态和Location标头或重定向(取决于哪个客户可以理解)。
  • 让客户端使用GET检查此资源上的结果。您也可以返回此资源的表示(或类似的东西),就像之前POST返回的实体一样。

由您决定结果资源的生命周期。如果您不需要长时间存储结果,它可能是短暂的。例如,URI可以从UUID构造。

答案 2 :(得分:5)

在您的情况下,为什么不将cache作为资源?

DELETE /cache

当你想要冲洗它时。

POST /cache

当你想要创建一个新的。

或者将前两个组合成以下内容:

DELETE /cache?autorecreate=true