【发布时间】:2015-12-28 18:43:50
【问题描述】:
我被要求编写一个基于 HTTP 的小型服务,该服务将接受如下所示的请求:
[
{ name: 'James Smith', address: '10 Lake Drive' }
{ name: 'Jones', phone_number: '999-123-4567' }
{ name: 'Mr. Lucas', address: 'Detroit, MI' }
]
(但请求数量较多)并尝试确定每个帐户是否存在一个帐户,返回如下所示的数据:
[
{ name: 'James Smith', address: '10 Lake Drive', account='123ABC' }
{ name: 'Jones', phone_number: '999-123-4567', account='Not Found' }
{ name: 'Mr. Lucas', address: 'Detroit, MI', account='654CBA' }
]
此服务的客户端(至少,我所知道的第一个客户端)将同步使用此数据——它无法继续,直到它从服务接收回帐号。 (将规格请求项目与帐户匹配的实际处理并不重要。)
我被要求为此服务提供 RESTful API。我可以看到将其封装在 RESTful API 中的唯一方法是创建包含一个或多个查找请求的“LookupRequestDocument”的概念。客户端将POST this 发送到\LookupRequests\ 的URI,接收服务器为整个请求生成的URL,然后使用GET 轮询该URL,直到响应准备好。
这让我感觉不舒服,原因如下:
- 我创建了一个新概念(LookupRequestDocument“资源”),只是为了让 API 成为 RESTful 风格 - 在问题陈述中没有其他存在。
- 我已经将异步性引入了同步问题。
对我来说,POST 将数据发送到像 \DoMatches 这样的 URI 并在返回的文档中获得完整的结果似乎更自然。但这似乎不符合我的客户的 API 是 RESTful 的要求。
问题:我将问题封装到 RESTful API 中是否是解决此问题的“成为 RESTful”的最佳方式?我的\DoMatches 解决方案实际上是 RESTful 的,即使它不涉及我理解的资源?
【问题讨论】: