1

我从事一项从博客中抓取特定链接的服务。该服务调用不同的站点,这些站点提取并存储数据。

我在指定用于更新服务器上数据的 url 时遇到了麻烦,我现在使用动词 update 来拉入最新的链接。

我目前使用以下端点:

GET /user/{ID}/links - gets all previously scraped links (few milliseconds)
GET /user/{ID}/links/update - starts scraping and returned the scraped data (few seconds) 

第二个网址有什么好的选择?我自己想出了一些例子。

GET /user/{ID}/links?collection=(all|cached|latest)
GET /user/{ID}/links?update=1
GET /user/{ID}/links/latest
GET /user/{ID}/links/new
4

1 回答 1

4

使用 GET 启动一个进程不是很 RESTful。您并没有真正获取信息,而是要求服务器处理信息。您可能想针对 /user/{ID]/links 进行 POST(如果您对那里的细节感到好奇,那么使用 PUT 与 POST 的快速 Google 将为您提供无穷无尽的阅读)。然后你有两个选择:

POST 与后台进程:如果使用后台进程(或队列)可以返回 202 Accepted,表示服务已接受请求并即将做某事。202 通常表示客户端不应等待,这在执行与时间相关的操作(如抓取)时很有意义。然后,客户端可以在第一个链接上发出 GET 请求以检索更新。

创造性地使用 Last-Modified 标头可以告诉客户端何时有新的更新可用。如果你想变得超级花哨,你可以实现 HEAD /user/{ID}/links 它将返回一个 Last-Modified 标头而没有响应正文(节省带宽和处理)。

带有直接处理的 POST:如果您在请求期间进行处理(在总体方案中不是一个好计划),您可以返回 200 OK 并带有包含更新链接的响应正文。

随后的 GET 将正常执行。

更多信息在这里

和这里

和这里

于 2014-05-02T08:22:15.187 回答