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