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

REST API有关幂等性等11条最佳实践

在我职业生涯中,我使用了数百个 REST API 并制作了数十个。由于我经常在 API 设计中看到相同错误,因此我认为写下一组最佳实践可能会更好。...通过使不同类型 ID 具有自描述性,您可以显着改善 API 的人机工程学。...规则 #8:不要使用 404 来表示“未找到” HTTP 规范规定,应使用 404 来表示未找到资源。按照字面解释,如果向不存在 ID 提出 GET/PUT/DELETE 等请求,则应返回 404。...但是,如果您正在构建具有多层 REST 服务大型系统,则可以通过预先建立标准错误格式来为自己省去很多麻烦。...在 409 响应正文中提供原始 ID 亮点:通过允许具有相同参数重复请求或在冲突时返回现有 ID,使 API 具有幂等性。

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

带有 Python REST Web 服务示例 REST API 快速入门指南

创建 API 端点和 REST 方法 接下来,我们需要创建 api 端点和所需 REST 方法,如下所示。 GET 方法将在文章列表中搜索请求类别,如果找到则返回数据以及响应代码 200 OK。...否则 404 未找到 class Article(Resource): def get(self, category): POST 方法将在文章列表中插入新文章数据,并返回插入数据并创建响应代码...def put(self,category): DELETE 方法删除记录(如果存在)并返回响应代码为 200 OK 数据。否则 404 未找到。...def delete(self,category): 4.注册资源并分配URI 我们最后一步是将我们资源注册到 REST API 并为其分配一个 URI。...api.add_resource(Article, "/category/") TGS.run(debug=True,port=8080) 完整 REST 示例程序

2.1K00

BaaS API 设计规范

主要包含两个方面的规范:API 本身设计规范、API 帮助文档编写规范。 1.2. 参考资料 《Representational State Transfer (REST)》 1.3....Ø REST:一种开放基于互联网软件架构模式。参见:《Representational State Transfer (REST)》。 2. API 设计规范 2.1....(App、User) · 404:请求地址未找到。如 users/1 未找到该资源。 · 500:内部程序错误。...其中,201、404这两个状态码,是需要API开发者在每一个API中,根据业务逻辑执行结果来主动返回。其它状态码由框架统一进行返回。 2....其它 时间格式:API返回 值中时间,都统一采用UTC格式 时间。 API返回值中,如果需要包含调试相关信息(如调用时间、调用次数等),由BAAS平台框架统一处理,不单独在各API中处理。

3.1K111

RESTful 接口

什么是 RESTful 接口 REST -> Respresentational State Transfer(表述性状态转移) REST 将资源状态以适合客户端形式从服务端发送到客户端(或相反方向...RESTful 接口是一种设计风格,用于构建网络应用程序 API。...RESTful 接口还使用 HTTP 状态码来表示请求处理结果,例如 200 表示成功、404 表示资源未找到等。RESTful 接口还支持数据不同表示格式常用有 JSON 和 XML。...REST 特征 REST 有以下特征: 客户 - 服务端(client - server):提供服务服务器和使用服务客户端需要被隔离对待 无状态(stateless):服务器端不存储客户请求中信息...相关案例会在后面的文章中进行补充~ 参考 《Spring Boot 实战派》 什么是 REST API

76030

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

REST 是由计算机科学家 Roy Fielding 定义,他在 2000 年博士论文中介绍了 REST 原则。...这就是前后端分离优势所在。如何使用REST API?HTTP 动词REST API 通过各种 HTTP 请求方法,使前端与服务器通信过程更容易,最常用方法是:GET : 用于读取服务器上数据。...常见 HTTP 状态码1xxs:信息响应,服务器仍在处理请求。2xxs:成功,请求成功完成3xxs:重定向,收到请求重定向到另一个地址。4xxs:客户端错误,例如,404 - 找不到页面。...400:错误请求(客户端应修改请求)401:未经授权,凭据无法识别403:禁止,凭据接受但没有权限404未找到,资源不存在410:消失了,资源以前存在但现在不存在429:请求过多,用于速率限制,应包含重试标头...500:服务器错误,一般性,值得查看其他 500 级错误503:服务不可用,另一个重试标头有用总结REST是一种软件架构风格,用于 Web 架构设计,任何遵循 REST 设计原则 API都被称为 RESTful

1.1K30

Restful API 接口规范详解

安全性:对该REST接口访问,不会使服务器端资源状态发生改变。RESTful API设计规范 既然了解了RESTful一些规则和特性,那么具体该怎么去设计一个RESTful API呢?...URI 应该具有层级结构,以便表示资源之间关系。例如:GET /users/1/orders/14、使用查询参数来过滤和分页 使用查询参数来过滤和分页资源,例如:“?...404:表示未找到资源。500:表示服务器内部错误。6、使用 JSON 或 XML 来表示数据 使用 JSON 或 XML 来表示数据,以便不同客户端能够方便地进行数据解析和处理。...{ "error": { "code": 404, "message": "User not found" }}9、使用标准HTTP头部: 使用HTTP头部中Accept和Content-Type...案例 详情请见:https://restfulapi.cn/总结 RESTful风格API 固然很好很规范,但大多数互联网公司并没有按照或者完全按照其规则来设计,因为REST是一种风格,而不是一种约束或规则

3.3K11

5个REST API安全准则

当开发REST API时,从一开始就必须注意安全方面。 REST是通过URL路径元素表达系统中特定实体手段。REST不是一个架构,而是一种在Web上构建服务架构风格。...TLS开销在现代硬件上是可以忽略具有微小延迟增加,其对于最终用户安全性得到更多补偿。 考虑使用相互认证客户端证书为高度特权Web服务提供额外保护。...当设计REST API时,不要只使用200成功或404错误。 以下是每个REST API状态返回代码要考虑一些指南。 正确错误处理可以帮助验证传入请求,并更好地识别潜在安全风险。...403禁止 -当身份验证成功,但身份验证用户没有权限使用请求资源。 404未找到 -当请求一个不存在资源。 405不允许方法 -意外HTTP方法错误检查。...遵循这些准则将导致更安全和高质量REST API服务和更多开发人员友好REST API

3.7K10

Python构建RESTful API指南

import api_viewfrom rest_framework.response import Response​tasks = [ {"id": 1, "title": "Task 1"...使用HTTP状态码:使用适当HTTP状态码来表示请求结果,如200表示成功,404表示资源未找到,500表示服务器错误等。...数据验证:在处理请求数据之前进行数据验证,以确保数据完整性和一致性,可以使用Flask-WTF或Django REST framework等库来实现数据验证。...错误处理:在API中实现统一错误处理机制,对于常见错误情况(如资源未找到、权限不足等),返回适当HTTP状态码和错误信息,以便客户端能够正确处理错误情况。...@app.errorhandler(404)def not_found(error): return jsonify({'error': 'Not found'}), 404@app.errorhandler

25230

RESTful API,以及如何使用它构建 web 应用程序。

RESTful API是一种基于REST(Representational State Transfer)架构风格API(Application Programming Interface),它采用HTTP...一、RESTful API概念 REST(Representational State Transfer)是一种软件架构风格,它强调将网络上所有事物都抽象为资源,并对资源进行标准化描述和控制。...RESTful API则是基于REST架构风格API设计规范,它通过使用HTTP协议定义和操作资源,实现了API标准化和模块化。...灵活:RESTful API使用统一接口标准,使得API使用和维护更加灵活。 可维护:RESTful API使用统一接口标准,使得API维护更加方便。...错误处理:RESTful API使用HTTP状态码进行错误处理,如404表示资源未找到等。

20410

AJAX+JSON总结

0: 请求未初始化 1: 服务器连接已建立 2: 请求已接收 3: 请求处理中 4: 请求已完成,且响应已就绪 status 200: "OK" 404: 未找到页面...0: 请求未初始化 1: 服务器连接已建立 2: 请求已接收 3: 请求处理中 4: 请求已完成,且响应已就绪 status 200: "OK" 404: 未找到页面 在 onreadystatechange...用于转换结果函数或数组。 如果 replacer 为函数,则 JSON.stringify 将调用该函数,并传入每个成员键和值。使用返回值而不是原始值。...根对象键是一个空字符串:""。 如果 replacer 是一个数组,则仅转换该数组中具有键值成员。成员转换顺序与键在数组中顺序一样。...space: 可选,文本添加缩进、空格和换行符,如果 space 是一个数字,则返回值文本在每个级别缩进指定数目的空格,如果 space 大于 10,则文本缩进 10 个空格。

1.9K20

Django-djangorestframework-异常模块-源码及自定义异常

(没有继承 APIVIew 视图函数不会触发) drf 默认提供了异常处理方案(rest_framework.views.exception_handler),但是处理范围有限 drf 提供处理方案有两种...By default we handle the REST framework `APIException`, and also Django's built-in `Http404` and...一定有值 显而易见,我们只需要自定义一个异常处理方法,先调用系统自带那个异常处理函数,然后把 drf 自带那个异常函数没有处理情况处理了就好了(处理后返回一个 Response 对象即可,一定要有返回值...,否则没多大意义) 歩鄹 先将异常处理交给 rest_framework.views exception_handler 去处理 判断处理结果(返回值)response,有值代表 drf 已经处理了...'api.apps.ApiConfig', 'rest_framework', # 注册 drf ] # 2.在 restframework 配置中配置该自定义异常模块 REST_FRAMEWORK

1.3K10

REST服务与RestfulAPI风格

解决当前各系统间接口规范不统一问题 需要版本号(ansible接口建议新老版本间用版本号区别) post get delete update up 只用post get 返回用json格式 基本返回值...{ "code": 500, 200 , 404, "msg": "Something bad happened", } api 接口必须加版本号,初始版本 【v1】,多个版本api版本可能同时在线...不使用restPUT和DELETE,因为很多浏览器不支持,很多框架也不支持 POST在需要传输大量数据时候使用,其余使用GET就可以了 参数数量和长度给一个值 所有路径path全部小写,以下划线分隔...page=2&perPage=100 用json格式返回 使用Token令牌来做用户身份校验与权限分级 需要外部调用部门内api 例如钉钉回调地址 必须走API网关 错误处理 不要直接将异常抛给客户端处理...apiapi错误分级 code代码说明 200:解释 500 :解释 404:解释 { "code": 500, "msg": "Something bad happened

54020

通俗讲解 RESTful

来看一下常见解释: (1)神一样描述 REST 并不是“休息”意思,而是 Representational State Transfer 简称,即 表现层状态转移。...(2)云里雾里描述 REST 指的是 一组架构约束条件和原则,如果一个架构符合 REST 约束条件和原则,就称之为 RESTful 架构。 RESTful 是一种软件架构风格,而不是标准。...另外,PUT 时候,也不是每个 user 就要建一个接口,这里需要用到就是路由,一般是写成 PUT /api/users/{id},这样就具有一般性了。路由在这里就不展开讲了。...(2)URL 中只用名词指定资源,因为 REST 核心是资源,而表示资源词语天然就是名词。 (3)资源用复数表示。...,服务端正常解析和请求,但是调用被回绝或者不被允许 404未找到,指定资源不存在 422 – 不可指定请求体 – 只有服务器不能处理实体时使用,比如图像不能被格式化,或者重要字段丢失 500

69340

前端架构带你 封装axios,一次封装终身受益!

这其中可以归为两类, 一类是 针对单独接口处理 二类是 针对所有接口需要内容 针对单独接口处理 请求前参数处理 请求后返回值处理 针对所有接口处理 Post Get Put Del 拦截器...代码异常处理 统一调用 随着我们 Api 越来越多,我们可能需要给他们不同分类,但我们并不希望每次调用都从不同文件夹引入不同 Api ,因此在 基础请求 + 拦截器 之外,我们还需要一个封包操作...针对所有接口处理(Get) 我们希望以 const [e, r] = await api.getUserInfo(id) 方式调用,代表着我们需要保证返回值稳定返回 [err, result] ,...同时,我们希望我们可以处理返回值,因此在这里封装了 clearFn 回调函数。...但是我们还有一些额外操作无处存放(参数处理、返回值处理),且我们并不想将他们耦合在页面中每次调用进行处理,那么我们显然需要一个位置来处理这些内容。 import { Get } from "..

4.2K20
领券