首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【译】构建RESTful API的13种最佳实践

假设你要检索所有作者。因此,你将调用以下端点:GET api.com/authors。 当你读取请求时,你无法判断 API 响应是否只包含一个或所有作者。因此,API 端点应该使用复数资源。...201(Created):指示成功创建资源。 400(Bad Request):代表客户端错误。也就是说,请求的格式不正确或缺少请求参数。...8.通过 HTTP 标头发送元数据 HTTP 标头允许客户端随其请求发送其他信息。例如,Authorization 标头通常用于发送身份验证数据以访问 API。...你可以在此处找到所有可能的 HTTP 标头的完整列表。 9.限速 速率限制是控制每个客户端请求数量的一种有趣方法。...这些是服务器可能返回的速率限制标头: X-Rate-Limit-Limit:告诉客户端在指定时间间隔内可以发送的请求数。

1.9K10

可靠的远程代码执行(2)

这仅适用于 Linux 客户端,因为它们使用 cURL 然后进行比较。在 Windows 上,客户端只假设 Windows API 返回的值是正确的。...这会产生相同的错误,因为我们可以只发送一个Content-Length带有小的响应主体的任意标头。 我们使用 Python 脚本设置了一个 HTTP 服务器,并使用了一些 HTTP 标头值。...尽管 CS:GO 代码Content-Length由于其区分大小写的搜索而错过了第二个标头,并且仍然需要1337正文数据字节,但 cURL 使用最后一个标头并立即完成请求。...在 Windows 上,即使响应格式错误,API 也只会返回第一个标头值。CS:GO 代码然后将分配的缓冲区以及缓冲区中包含的所有未初始化的内存内容(包括指针)写入磁盘。...尽管 CS:GO 似乎使用 Windows API 来处理 Windows 上的 HTTP 下载,但完全相同的 HTTP 响应起作用并允许我们在玩家的机器上创建包含未初始化内存内容的任意大小的文件。

3.3K100
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    REST API设计指导——译自Microsoft REST API Guidelines(四)

    表的请求头应该遵循微软REST API服务规范。使用这些标头不是必须的,但是如果用到,那么它们必须使用一致。...基本的API操作禁止定义自定义标头。...本文档中的一些准则规定了使用非标准HTTP标头。 此外,某些服务可能需要添加额外的功能,这些功能通过HTTP标头公开。 以下准则有助于保持自定义标头使用的一致性。...并非所有的标头都是有意义的查询参数,包括大多数标准的HTTP头。...在HTTP中,客户端应该使用Accept标头请求响应格式。 服务端可以选择性的忽略,即使这不是典型的良好的服务。 客户端可以发送多个Accept标头,服务可以选择其中一个格式进行返回。

    2K50

    使用AJAX获取Django后端数据

    使用Django服务网页时,只要用户执行导致页面更改的操作,即使该更改仅影响页面的一小部分,它都会将完整的HTML模板传递给浏览器。...Headers “ Accept”和“ X-Requested-With”标头与GET请求的标头相同,但是现在必须包括一个附加的“ X-CSRFToken”标头。...我们从POST请求中获得的响应将像GET请求一样使用链式承诺进行处理。 在视图中处理POST请求 接受POST请求的视图将从请求中获取数据,对其执行一些操作,然后返回响应。...如果发现自己在多个模板中使用它们来获取大量数据,请考虑使用Django Rest Framework创建API。...正确而谨慎地使用它,可以使我们的页面感觉更快,并为用户提供更多的交互体验。

    7.6K40

    Microsoft REST API指南

    5.2 故障 故障(缺陷),或者更具体地说是服务故障,定义为服务无法正确返回数据以响应有效的客户端请求。通常会返回“5xx”HTTP错误代码。 故障会影响整体 API 的可用性。...有关选项使用的示例,请参见完善CORS跨域调用。 7.5 标准的请求标头 下面的请求标头表 应该遵循 Microsoft REST API指南服务使用。...使用这些标题不是强制性的,但如果使用它们则必须始终一致地使用。 所有标头值都必须遵循规范中规定的标头字段所规定的语法规则。...即使api没有使用其他OData结构,也应该使用这种格式。 错误响应必须是单个JSON对象。该对象必须有一个名为“error”的 名称/值(name/value) 对。该值必须是JSON对象。...作为标准XMLHttpRequest调用的一部分,所有握手步骤都是不可见的。 许多其他平台(如.NET)已集成了对CORS的支持。 8.1.1.

    4.6K11

    什么是RESTful,REST api设计时应该遵守什么样的规则?

    POST : 用于创建数据。PATCH/PUT:用于更新数据。DELETE : 用于删除数据。图片路径请求必须包含指向应该对其执行操作的资源的路径。在RESTful风格中,应该遵守以下原则:1....limit=106、使用连字符增加可读性最好用连字符-,而不是_或者驼峰,在所有 RESTful API 中,连字符等同于空格。...,使用小写字母将确保命令的正确性,即使 URL 是用大写字母输入的,但反之则不然:比如上面第6个url最好不要写成:https://www.wljslmz.cn/v1/users/1/Start-Sork...400:错误请求(客户端应修改请求)401:未经授权,凭据无法识别403:禁止,凭据接受但没有权限404:未找到,资源不存在410:消失了,资源以前存在但现在不存在429:请求过多,用于速率限制,应包含重试标头...500:服务器错误,一般性,值得查看其他 500 级错误503:服务不可用,另一个重试标头有用总结REST是一种软件架构风格,用于 Web 架构的设计,任何遵循 REST 设计原则的 API都被称为 RESTful

    1.2K30

    Android O 行为变更官方指南

    网络连接和 HTTP(S) 连接 Android O 对网络连接和 HTTP(S) 连接行为做出了以下变更: 无正文的 OPTIONS 请求具有 Content-Length: 0 标头。...之前,这些请求没有 Content-Length 标头。 HttpURLConnection 在包含斜线的主机或颁发机构名称后面附加一条斜线,使包含空路径的网址规范化。...开发者如果对 API 使用不当,将会看到一条 ADB 消息:“URI example..com 的主机名包含空白标签。此格式不正确,将不被未来的 Android 版本所接受。”...相反,由系统生成 proxy-authorization 标头,在代理响应初始请求发送 HTTP 407 后将其发送至此代理。...同样地,系统不再将 user-agent 标头由隧道连接请求复制到建立隧道的代理请求。相反,库为此请求生成 user-agent 标头。

    1.7K20

    Web Security 之 HTTP Host header attacks

    即使 Host 头本身得到了安全的处理,也可以通过注入其他标头来覆盖 Host ,这取决于处理传入请求的服务器的配置。...验证 Host 头 如果必须使用 Host 头,请确保正确验证它。这包括对照允许域的白名单进行检查,拒绝或重定向无法识别的 Host 的任何请求。你应该查阅所使用的框架的相关文档。...简而言之,你需要能够修改 Host 标头,并且你的请求能够到达目标应用程序。如果是这样,则可以使用此标头来探测应用程序,并观察其对响应的影响。...有些服务器会将缩进的标头解释为换行,因此将其视为前一个标头值的一部分。而其他服务器将完全忽略缩进的标头。 由于对该场景的处理极不一致,处理你的请求的不同系统之间通常会存在差异。...注入覆盖 Host 的标头 即使不能使用不明确的请求重写 Host 头,也有其他在保持其完整的同时重写其值的可能。

    5.9K20

    Postman----API接口测试神器

    API测试——测试API集合,检查它们的功能、性能、安全性,以及是否返回正确的响应。...可在Postman中使用的API调用方法: ? 根据API调用的标头: ? 根据API调用的正文信息: ? 然后,您可以通过单击Send按钮来执行API调用。...DELETE请求:用于删除数据 请求URL: 发出Http请求的位置 请求标头 - 在请求标头中它包含应用程序的键值。...2.HTTP响应——在发送请求时,API发送响应,包括正文,Cookie,标头,测试,状态代码和API响应时间。 Postman在不同的选项卡中组织正文和标题。...它提供了对所有CHAI-JS和CHAI-HTTP断言以及API的一些自定义断言的完全访问权限。断言更容易记住和可读,例如自定义断言response.body.shand.be.a.user。

    3.9K30

    Web标准安全性研究:对某数字货币服务的授权渗透

    ,对这些localhost API服务的研究已发现了许多可远程利用的问题。...此功能通过可由“目标站点”设置的跨域资源共享(CORS)标头实现。 通常,网站不启用CORS,或仅为特定域启用CORS。这意味着浏览器只会阻止传递响应。因此,请求站点无法读取响应数据。 ?...然而,这有时并不理想,因为这会让API的使用变得更为困难,因此开发人员也经常为此寻找替代解决方案。 另一种常见的技术是验证请求头,以确保请求来自合法的客户端应用程序。...检查标准 要确定我们可以在出站请求中控制哪些标头,就需要我们对Web标准有更为深入的了解。这些标准定义了两个标头列表。...他们对该漏洞的严重性表示了认同,并通过强化其使用磁盘令牌的服务及时解决了这个问题。

    1.7K40

    使用结构化的标头字段改善HTTP

    它们会携带请求和响应的元数据,通常,这部分数据是消息发送者由于某种原因无法放入正文内容的信息,或者是消息接收者无需查看正文内容即可获得的信息。...例如,许多Cache-Control报头都是有效的“结构化字段”,即使它没有定义为一个: Cache-Control: max-age=3600, immutable 很不幸你还不能将结构化字段用于现有的标头...它使用HTTP/2(和/3)SETTINGS机制来协商对替代序列化的支持,并利用结构化字段与许多现有标题字段的语法的相似性将其返回到一组已经广泛使用的标题字段上,如果它们无法解析,则返回到不透明的文本。...●立即使用结构化字段● 结构化字段规范正处于标准化的最后阶段,这意味着它很快会成为一个RFC。目前我们已经有多个实例,包括在Chrome中,许多新的安全头(例如Fetch元数据)都是结构化的。...如果你定义了新的消息头(无论它们是针对整个的Web还是仅针对HTTP API)都可以在RFC发布后开始使用结构化字段。

    65510

    IDOR漏洞

    然后,你可以捕获密码重置请求并使用任何代理工具检查参数。我们已经多次看到这些请求中的“用户ID”值,并且我们可以轻松地接管到另一个用户的帐户。 同时,在请求中发送的标头值占用帐户是一件很重要的事情。...同样,如果您的测试请求是XHR(XML HTTP请求),则必须检查请求中“Content-Type”标头参数的验证。...此外,应用程序的请求可能有自定义标头,如“W-User-Id”,“X-User-Id”,“User-Token”等。如果你想进行正确且完美的测试,则必须发送所有应用中使用的标头都是正确的。...你可以使用这些工具尝试所有GET,POST,PUT,DELETE,PATCH请求和成功以及快速的API测试。...首先,你应该在创建应用程序时控制所有正常,ajax和API请求。例如,只读用户可以在应用程序中写任何内容吗?或者非管理员用户可以访问并创建仅由admin用户创建的API令牌吗?

    3.3K30

    Postman之request

    我们可以单独添加键-值对,Postman会将上述查询字符串中的所有内容组合在一起。如果网址已经有参数,Postman会自动将网址分成键-值对两部分。如下图所示: ?..." 注意请求头Headers:当通过HTTP协议发送请求时,服务器可能需要一个Content-Type标头。Content-Type头让服务器正确解析请求体。...如果我们手动使用Content-Type标头,则该值优先于Postman设置的值。...& x-www-form-urlencoded 该编码与URL参数中使用的编码相同。我们只需输入键-值对,Postman会正确编码键和值。请注意,我们无法通过此编码模式上传文件。...除了替换环境变量之外,Postman不触碰在编辑器中输入的字符串。无论你在编辑区输入什么内容,都会随请求一起发送到服务器。编辑器允许我们设置格式类型以及使用原始主体发送的正确请求头。

    1.4K30

    顶级开源项目 Sentry 20.x JS-SDK 设计艺术(概述篇)

    认证 预期将与消息正文(message body)一起发送身份验证标头(authentication header),该消息标头用作所有权标识符(ownership identifier): X-Sentry-Auth...请注意: 您应该在标头的 User-Agent 部分中包含 SDK 版本字符串,如果 auth 标头中未发送 sentry_client ,则将使用该字符串。...在无法发送自定义 X-Sentry-Auth 标头的情况下,可以通过查询字符串发送以下值: ?...强烈建议 SDK 在将请求正文发送到服务器之前先对其进行压缩,以保持数据量较小。...将标头设置为 transfer-encoding: chunked,这可以省略 content-length 标头,并要求将请求主体包装到 chunk 标头中。 有关更多详细信息,请参见 MDN。

    2K20

    对不起,看完这篇HTTP,真的可以吊打面试官

    也就是说使用这些 API 的应用程序想要请求相同的资源,那么他们应该具有相同的来源,除非来自其他来源的响应包括正确的 CORS 标头也可以。...一般创建 Request 对象有两种方式 使用 Request() 构造函数创建一个 Request 对象 还可以通过 FetchEvent.request api 操作来创建 再来说下 Request.credentials...几种常见的方法肯定是安全的,它们是 GET、HEAD和 OPTIONS。所有安全的方法都是幂等的(这他妈幂等又是啥意思?)...但不是所有幂等的方法都是安全的,例如 PUT 和 DELETE 都是幂等的,但不安全。 幂等性:如果相同的客户端发起一次或者多次 HTTP 请求会得到相同的结果,则说明 HTTP 是幂等的。...tasty_cookie=strawberry [page content] 此标头告诉客户端存储 Cookie 现在,随着对服务器的每个新请求,浏览器将使用 Cookie 头将所有以前存储的 cookie

    6.4K21

    AWS alb 了解

    每个目标组的路由都是单独进行的,即使某个目标已在多个目标组中注册。可以配置目标组级别使用的路由算法。默认路由算法为轮询路由算法;或者,可以指定最少未完成请求路由算法。...使用为目标组配置的路由算法,从目标组中为规则操作选择目标。默认路由算法是轮询。每个目标组的路由都是单独进行的,即使某个目标已在多个目标组中注册。...当 Application Load Balancer 和 Classic Load Balancer 收到 Expect 标头时,它们会立即使用 HTTP 100 Continue 响应客户端而不测试内容长度标头...HTTP 标头限制 Application Load Balancer 的以下大小限制是无法更改的硬限制。...HTTP/1.x 标头 请求行:16K 单个标头:16K 整个标头:64K HTTP/2 标头 请求行:16K 单个标头:16K 整个标头:64K 负载均衡器模式 在创建负载均衡器时,您必须选择使其成为内部负载均衡器还是面向

    2.2K00

    震惊 | HTTP 在疫情期间把我吓得不敢出门了

    也就是说使用这些 API 的应用程序想要请求相同的资源,那么他们应该具有相同的来源,除非来自其他来源的响应包括正确的 CORS 标头也可以。...一般创建 Request 对象有两种方式 使用 Request() 构造函数创建一个 Request 对象 还可以通过 FetchEvent.request api 操作来创建 再来说下 Request.credentials...它表明除了像 CROS 安全列出的请求标头外,对服务器的 CROS 请求还支持名为 X-Custom-Header 的自定义标头。...但不是所有幂等的方法都是安全的,例如 PUT 和 DELETE 都是幂等的,但不安全。 幂等性:如果相同的客户端发起一次或者多次 HTTP 请求会得到相同的结果,则说明 HTTP 是幂等的。...tasty_cookie=strawberry [page content] 此标头告诉客户端存储 Cookie 现在,随着对服务器的每个新请求,浏览器将使用 Cookie 头将所有以前存储的 cookie

    5.4K20

    WebSocket攻防对抗安全指南

    ,这让我产生了需要深入研究一下的想法 历史背景 在过去的很长一段时间,创建客户端和服务器之间双向通信的WEB应用程序(例如:即时消息和游戏应用程序)大多都是通过HTTP协议来轮询服务器以获取更新,同时将上游通知作为不同的...: 之后此时网络连接保持打开状态,并且可以用于向任一方向发送WebSocket消息 请求头的Connection:``Upgrade标头表示进行协议切换 请求头的Upgrade:websocket标头标识切换协议至...,如果请求是正确的升级请求,代理会将其转换为后端 第二步:后端用状态代码为"101"的HTTP响应回答反向代理,响应还具有"Upgrade"和"Sec-WebSocket-Accept"标头,反向代理应该通过检查状态代码和其他标头来检查后端是否确实准备好建立...:客户端向反向代理发送升级请求,但标头"Sec-WebSocket-version"中的协议版本错误,代理未验证"Sec-WebSocket-Version"标头并认为升级请求正确并将请求转到后端 第二步...,这使得攻击变得更加困难,但也并非不可能,下面我们观察第二种情况,假设我们现在有公开公共WebSocket API和公共REST API用于health检查的后端,也有外部无法使用的内部REST API

    13610
    领券