【问题标题】:REST API and POST request: what data goes in the url and what in the post request?REST API 和 POST 请求:url 中包含哪些数据,post 请求中包含哪些数据?
【发布时间】:2020-08-18 09:10:07
【问题描述】:

我正在开发一个时间表 web 应用程序。我的问题是后端服务器的 url 应该是什么样子。我已经看到下面提供的两个示例都在现有 API 中使用。我对公约很好奇。

最好的问候和提前非常感谢!

例子:

REST API 端点:mycoolwebapp.com/api/timesheet/{user_id}/{date} 使用 POST 负载:

{'hours' : 8, 'operation': 'documentation'}

或者:

REST API 端点:mycoolwebapp.com/api/timesheet/ 使用 POST 负载:

{'user_id': 10, 'date': '2020-08-18', 'hours' : 8, 'operation': 'documentation'}

【问题讨论】:

    标签: python-3.x api rest http-post


    【解决方案1】:

    url 中包含哪些数据,post 请求中包含哪些数据?

    REST API 是一种外观。当我们创建一个 REST API 时,我们真正在做的是提供一个接口,其行为类似于一个符合 HTTP 的文档存储(也称为“网站”)。

    URI 是用于从存储中检索正确文档的密钥。这里要考虑的python 模拟是dictionary。

    在简单的情况下,我们考虑两个字典;第一个是在源服务器上使用,以跟踪每个资源的权威副本。

    第二个字典是客户端使用的cache。使用标识符作为键存储资源的表示。

    HTTP 为缓存条目的invalidated 提供了明确的语义;该失效是由于成功的“不安全”请求而发生的。

    换句话说,当我们决定在哪里发布消息时,我们选择的其中一件事是应该使先前缓存的资源无效。缓存中的哪个主文档会因成功处理消息而发生变化?

    这告诉我们,我们为 POST 请求编码到 URI 中的信息应该与我们在对同一文档执行 GET 请求时编码到 URI 中的信息相同。

    相比之下:请求正文不会以任何方式影响缓存 - REST 的部分要点是通用组件所需的所有信息都包含在标准化元数据中。没有通用组件需要解析消息体来了解transport documents over a network 域中发生的事情。

    因此,您几乎可以对消息正文做任何您喜欢的事情。

    例如,将您需要的所有信息放入消息正文中是完全合理的,其中一些信息也在 URI 中重复。

    对于您的具体时间表示例,我感兴趣的问题是您使用什么 URI 来读取时间表?如果我们使用类似

    的方式检索文档
    GET /mycoolwebapp.com/api/timesheet/10/2020-08-18 HTTP/1.1
    

    那么这将是更新该文档的服务器副本的一种完全合理的方式

    POST /mycoolwebapp.com/api/timesheet/10/2020-08-18 HTTP/1.1
    Content-Type: application/json
    
    {'user_id': 10, 'date': '2020-08-18', 'hours' : 8, 'operation': 'documentation'}
    

    【讨论】:

    • "GET /mycoolwebapp.com/api/timesheet/10/2020-08-18 HTTP/1.1" 我确实在使用这种特定的方式来阅读时间表。谢谢你的评论和很好的解释!
    【解决方案2】:

    以下是首选,因为浏览器中暴露的数据量较少。

    REST API 端点: mycoolwebapp.com/api/timesheet

    POST 负载: {'user_id': 10, 'date': '2020-08-18', 'hours' : 8, 'operation': 'documentation'}

    【讨论】:

    • 感谢您的回复。我同意你的观点,但用户 VoiceOfUnreason 有更好的动机。
    猜你喜欢
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 2011-10-19
    • 2014-12-01
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 2018-10-15
    相关资源
    最近更新 更多