第一种解决方案
根据RESTful Web Services Cookbook,您可以将计算视为资源,只需使用GET
获取即可。例如:
-- Request
GET /computations?param1=2¶m2=2 HTTP/1.1
-- Response
HTTP/1.1 200 OK
Content-Type: application/json
{
"result": 4
}
这听起来适用于具有少量输入参数的快速计算。但是如果您的计算不是那样,那么可以使用第二种解决方案。
第二个解决方案
将计算和结果都视为资源。对计算进行POST
,对结果进行GET
。例如:
首先创建一个计算
-- Request
POST /computations HTTP/1.1
Content-Type: application/json
{
"param1": 2,
"param2": 2
}
-- Response
HTTP/1.1 201 Created
Location: /computations/1
然后您可以获得这个计算。
-- Request
GET /computations/1 HTTP/1.1
-- Response
HTTP/1.1 200 OK
Content-Type: application/json
{
"param1": 2,
"param2": 2
}
同时,您还可以获取此计算的结果 (/computations/1/result
)
-- Request
GET /computations/1/result HTTP/1.1
-- Response
HTTP/1.1 204 No Content
Cache-Control: max-age=3600,must-revalidate
但是糟糕的是!还没有结果。服务器告诉我们一个小时后再回来尝试 (Cache-Control: max-age=3600,must-revalidate
)。第二种解决方案允许您使计算异步进行(在需要很长时间的情况下)或者您可以计算一次,将结果存储在某个数据库中,并在下一次请求时快速提供服务。
-- Request
GET /computations/1/result HTTP/1.1
-- Response
HTTP/1.1 200 OK
Content-Type: application/json
{
"result": 4
}