RESTful发送命令的方式

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

用例:我的服务器caching某些信息,以便在每次请求信息时不必读取数据库。 我需要一种方法来从我的客户端应用程序发送命令来告诉服务器刷新caching。 你会使用POST或PUT的一些URL,如“… / flush_cache”?

“命令”并不是真正需要“具象状态传输”的数据,除非被传输的状态是命令的结果 – “切换closures”,“caching刷新”等。一般来说, REST发送命令到服务器?

在过去的项目中,我经常遇到这样的情况。 因为REST对于资源来说是好的,所以如何处理真正RPC的事情并不总是很清楚。

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

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

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

    201创build(或根据库格尔的评论接受202)位置/官僚/命令/ 999

  2. 然后客户定期检查

    GET /官僚作风/命令请求/ 999

希望他得到如下的回应

 200 OK <command-request> <number>999</number> ... <result>Success</result> </command-request> 

当然,如果官僚服务有很好的客户关怀,那么当客户想要的时候可以给客户打电话,
“你想在我们的服务器上触发一个命令吗?请填写这张表格并发送给我们。请注意,你可以join你的联系信息,这样我们就可以打电话给你”

 POST /bureaucracy/command-request?callback=client.com/bureaucracy/inbox 

或者作为自定义http头X-Callback: http://client.com/bureaucracy/inbox

我build议这样做:

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

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

在你的情况下,为什么不使cache的资源?

 DELETE /cache 

当你想冲洗它。

 POST /cache 

当你想创build一个新的。

或者将前两者合并为以下内容:

 DELETE /cache?autorecreate=true