我需要在我的API中添加一个端点来读取一个大的加密输入文件,并从文件中返回一些解密的元数据。
对我来说,理想的解决方案是使用GET端点并将加密的blob作为查询参数,但我担心不同实现中的URI长度限制。
将数据作为正文参数放置似乎是一个坏主意(HTTP GET with request body),尤其是因为我担心它会对服务器端缓存解决方案造成严重破坏,而这些解决方案并不期望身体中存在任何信息GET。
从客户端获取数据并处理它以产生输出时使用的正确HTTP方法是什么?
更新 我目前的想法是在POST的主体中获取数据,并返回带有LOCATION头的201,该头包含引用该资源的GET URL(即,解密的元数据)。由于资源本身不以任何方式持久化,因此我必须将元数据作为查询参数放入GET中。但由于元数据是长度限制的(应用程序约束),这不应该是一个问题。
答案 0 :(得分:3)
我当然会避免在请求正文中使用HTTP GET。
对我来说,最合适的HTTP动词确实是通过POST。如果不保留结果资源,那么我将不会返回201.此外,在您的应用程序中,这可能会破坏解密的元数据,现在这些元数据将成为查询字符串参数。而只是返回带有内容的200,这对于POST操作来说是完全合理的。
答案 1 :(得分:1)
POST很好,但不要担心建议LOCATION标题。可以在POST响应正文中以200 OK返回元数据。
来自RFC:
POST方法执行的操作可能不会产生可由URI标识的资源。在这种情况下,200(OK)或204(No Content)是适当的响应状态,具体取决于响应是否包含描述结果的实体。