【问题标题】:Rest Api Best practice - Passing date as query paramRest Api 最佳实践 - 将日期作为查询参数传递
【发布时间】:2017-07-04 09:11:42
【问题描述】:

我正在使用 NodeJs 和 express 中间件编写一个休息服务。我有以下问题-

  1. 无论方法类型如何,我都必须在每个服务中使用用户 ID 和令牌进行身份验证,即 GETPOSTPUTDELETE。将这两个参数作为请求标头或查询参数的最佳方法是什么?我不想将它作为正文参数,因为 get 请求没有正文。

  2. 我想编写一个方法类型为GET 的服务用于数据检索,此调用的参数是字符串和日期。我应该如何将参数作为查询参数传递,特别是日期参数我应该将它作为 js 日期还是任何其他格式传递?

    GET - https://localhost:someport/<objectid>/<createddate>
    headers - x-user-id:someid
              x-access-token:sometoken
    

    如果是这样,那么应该传递创建日期的格式。

    还是我应该使用下面的?

    GET - https://localhost:someport/
    headers - x-user-id:someid
              x-access-token:sometoken
              x-object-id:someid
              x-created-date:somedate
    

【问题讨论】:

  • 将token放入header和user id作为get或post参数。
  • 标头中的标记是有道理的,但是您所说的用户 ID 作为 get 或 post 参数是什么意思?该服务必须得到,所以帖子是不可能的。现在 get 只有标题和查询参数,你建议哪一个?
  • 我建议保留用户 ID 作为查询参数。如果您还想支持帖子,请注意完全不相关的主题,然后使用查询参数进行相同的请求并且没有正文会起作用
  • 感谢@ArpitSolanki 的帮助,我已经更新了这个问题,请问您对此有何看法。

标签: node.js rest express


【解决方案1】:

请求标头是发送此类敏感信息的最佳位置。 Header 在所有 http 请求的方法中都是通用的。因此,您不必担心GETPOSTPUT 之类的方法。如果使用查询参数,我们会在 url 中更加难看。
另外,我不知道UserIDtoken 的用法。因为在 RESTful 服务器中,我们也使用令牌来识别用户。因此,我们一般不发送用户 ID。

【讨论】:

  • 感谢您的回答,这听起来完全有效,不使用带有令牌的用户 ID。我正在使用 jwt 作为您的信息,并且已经在令牌中传递了用户 ID。我可以摆脱用户ID。这样就少了一个参数,谢谢:)
【解决方案2】:

REST API 设计的最佳实践是公开非敏感用户信息的参数以获取请求作为查询参数。因此,用户 ID 和令牌之类的东西应该放在标头中,而其他东西可以放在获取请求参数中。

选择标题中只有用户 ID 和令牌的第一个。

【讨论】:

  • 我同意这一点,但问题是复杂数据类型(如日期)是否应该作为查询参数传递?
  • 是的,可以在查询参数中传递日期。只需确保您的日期格式没有任何与保留的 URL 字符冲突的字符
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 2018-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多