RESTful API设计请求元数据(会话ID等)的最佳实践?

mjt*_*mjt 2 rest api-design

在设计REST API时,传递统计信息和日志记录所需的元数据的最佳做法是什么,但哪些不会更改服务器的响应?

例如,如果我有服务找到最近的公共厕所,我可能想知道用户的位置是否由GPS确定.或者,如果最终用户的请求通过多个系统,我可能需要传递请求ID以进行调试.

据我了解,选项是:

查询参数

  • 与Google Maps API上的"sensor"参数类似.
  • 正确是因为它允许用户使用常规Web浏览器浏览API.
  • 对,因为对于发现很难发送自定义HTTP标头的客户来说更简单.
  • 错误,因为过滤器参数仅用于过滤,排序和搜索.
  • 错了,因为如果资源没有改变,为什么要使用URL?

HTTP标头

  • 像身份验证通常一样
  • 是的,因为它是请求元数据的正常位置,不会改变服务器的响应
  • 正确的原因是,对于POST/PUT请求,它避免同时具有查询参数和请求体.
  • 错误,因为在使用Web浏览器浏览API时无法设置标头.
  • 错误是因为应该避免复杂性,而URL + Header是比单独的URL更复杂的API.

如果允许元数据不存在,哪个是正确的选择?

如果元数据必须存在,答案是否不同,尽管它的值不会改变服务器的响应?

Dar*_*ler 5

HTTP标头是正确的答案.这就是他们的目的.

考虑到有多少其他可行的选项可用于测试web apis,作为调试器的Web浏览器并不是特别有效.像Postman,Dev HttpClient,Fiddler,Runscope这样的东西都是测试API的好方法.