如何为导出端点设计 REST API?

How to design REST API for export endpoint?

我正在设计 REST API 并且 运行 遇到了设计问题。我有 alerts,我希望用户能够 export 到少数文件格式之一。所以我们已经进入 actions/commands 和 export,这感觉像是 RPC 而不是 REST。

此外,我不想采用默认文件格式。相反,我想要求提供它。我不知道如何设计 API 来做到这一点,我也不知道如果没有提供必需的参数,对 return 的响应代码是什么。

这是我的第一个尝试:

POST /api/alerts/export?format=csv

POST /api/alerts/export/csv

此端点是否按照您的方式设置?是否以正确的方式设置要求文件格式?如果未提供所需的文件格式,return 的正确状态代码是什么?

谢谢。

事实上,您应该考虑使用 HTTP 内容协商(或 CONNEG)来执行此操作。这利用了 Accept header(请参阅 HTTP 规范:http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.1)指定响应的预期媒体类型。

例如,对于 CSV,您可以这样设置:

GET /api/alerts
Accept: text/csv

如果你想指定额外的提示(文件名,...),服务器可以 return Content-Disposition header(参见 HTTP 规范:http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1) 在响应中,如下所述:

GET /api/alerts
Accept: text/csv

HTTP/1.1 200 OK
Content-Disposition: attachment; filename="alerts.csv" 

(...)

希望对你有帮助, 蒂埃里