RESTAPI、HTTP谓词和访问日志

RESTAPI、HTTP谓词和访问日志,http,rest,restful-url,httpverbs,Http,Rest,Restful Url,Httpverbs,在设计RESTfulAPI时,我一直在努力遵循良好的RESTfulAPI实践。其中一个非常简单和常见的问题一直很难理解: 使用GEThttp谓词检索资源 为什么??假设你有一个URI来获得这样的帐户信息: 其中,AXY_883772是银行系统中的帐户id。安全审计将发出警告,说明: 帐户ID将显示在HTTP访问日志上 帐户ID可能会缓存在浏览器的历史记录中(即使不太可能定期使用浏览器访问RESTful API) 他们最后“建议”应该使用POST动词 所以,我的问题是: 我们能做些什么?

在设计RESTfulAPI时,我一直在努力遵循良好的RESTfulAPI实践。其中一个非常简单和常见的问题一直很难理解:

  • 使用
    GET
    http谓词检索资源
为什么??假设你有一个URI来获得这样的帐户信息:

其中,
AXY_883772
是银行系统中的帐户id。安全审计将发出警告,说明:

  • 帐户ID将显示在HTTP访问日志上
  • 帐户ID可能会缓存在浏览器的历史记录中(即使不太可能定期使用浏览器访问RESTful API)
  • 他们最后“建议”应该使用
    POST
    动词

    所以,我的问题是:


    我们能做些什么?只需遵循安全建议,避免在大多数情况下使用
    GET
    ?使用某种特殊的APACHE/IIS/NGINX访问日志配置来避免记录对某些URL的访问?

    如果您的URL中有敏感信息,并且您正在记录URL,那么您正在记录敏感信息

    所以有两个显而易见的解决方案:

    • 不要记录url
    • 使用不包含敏感信息的其他url
    最后一个可以通过使用服务器映射回正常id的某些(不同)id来实现

    如果这两种解决方案都不是您的选择,那么您就不能使用GET,因此它不是好的RESTful设计

    我意识到所有这些事情对你来说可能已经很明显了;但这是我能给出的最准确的答案


    这不仅适用于GET,实际上也适用于PUT、DELETE和POST。

    我想说的是,当RESTful不适用于您的项目时,不要编写RESTful。