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

请求元数据(会话id等)的RESTful API设计最佳实践?,rest,api-design,Rest,Api Design,在设计RESTAPI时,传递统计和日志所需的元数据的最佳实践是什么,但这不会改变服务器的响应 例如,如果我有一个查找最近公共厕所的服务,我可能想知道用户的位置是否由GPS确定。或者,如果最终用户的请求通过多个系统,我可能希望传递一个请求ID以进行调试 据我所知,这些选择包括: 查询参数 就像谷歌地图API上的“传感器”参数一样 是的,因为它允许用户使用常规web浏览器浏览API 对,因为对于那些发现很难发送自定义HTTP头的客户端来说,这更简单 错误,因为过滤器参数仅用于过滤、排序和搜索 错误

在设计RESTAPI时,传递统计和日志所需的元数据的最佳实践是什么,但这不会改变服务器的响应

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

据我所知,这些选择包括:

查询参数

  • 就像谷歌地图API上的“传感器”参数一样
  • 是的,因为它允许用户使用常规web浏览器浏览API
  • 对,因为对于那些发现很难发送自定义HTTP头的客户端来说,这更简单
  • 错误,因为过滤器参数仅用于过滤、排序和搜索
  • 错误,因为如果资源没有更改,为什么URL应该更改
HTTP头文件

  • 类似的身份验证通常都是这样做的
  • 正确,因为它是请求元数据的正常位置,不会更改服务器的响应
  • 正确,因为对于POST/PUT请求,它避免了查询参数和请求主体
  • 错误,因为在使用web浏览器浏览API时无法设置标题
  • 这是错误的,因为应该避免复杂性,URL+头是一个比URL更复杂的API
如果允许不存在元数据,那么哪一个是正确的选择


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

HTTP头是正确的答案。这就是他们在那里的目的

考虑到有多少其他可行的选项可用于测试web API,web浏览器作为调试器不是特别有效的。Postman、DevHttpClient、Fiddler和Runscope等都是测试API的好方法