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

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

作业 NotifyBravo 作业运行,在 SystemBravo 上调用 DELETE /things/Thing123 这样做是可行,因为队列会重试作业,直到成功为止。...但它也可能重试已经成功作业;队列是至少重试一次,而不是完全重试一次。 由于成功执行 DELETE 作业无论如何都会重试,因此作业必须将 "未找到 "响应视为成功。...如果将 404 作为成功处理,而堆栈中失败返回 404,作业就会从队列中删除,删除也不会传播。我在现实生活中就遇到过这种情况。...但是,如果您正在构建具有多层 REST 服务大型系统,则可以通过预先建立标准错误格式来自己省去很多麻烦。...您已经期望GET、PUT和DELETE操作是幂等: # GET doesn't change anything on the serverGET /orders/ORD123# 如果同一订单多次调用

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

一个简约可行 REST API 规范

后台接口一般以 REST API 形式对外提供服务,为了提升接口可维护性与使用者体验,公司或团队应制定对外接口统一规范。...first_name=john&last_name=doe 文档 接口提供 Swagger 说明文档,并包含清晰协议字段说明。...3.通用错误码 业务错误码 1 开头 1XXXX 通用错误码,其他错误码,不同模块服务自行与调用方约定。 以下是一些常见错误码。...10000 入参有误 10001 Token 非法 10002 请求超时 10003 记录未找到 10004 DB 写入失败 10005 DB 更新失败 10006 DB 查询失败 10007 DB 删除失败...10008 JSON 序列化失败 10009 JSON 反序列化失败 参考文献 Google JSON Style Guide REST API 最佳实践_恋喵大鲤鱼博客

23650

网站HTTP错误状态代码及其代表意思总汇

401.3 未经授权:访问由于 ACL 所请求资源设置被拒绝。 401.4 未经授权:Web 服务器上安装筛选器授权失败。 401.5 未经授权:ISAPI/CGI 应用程序授权失败。...未找到有效应用程序名称。 0144 初始化错误。初始化时页级别的对象列表失败。 0145 新应用程序失败。无法添加新应用程序。 0146 新会话失败。无法添加新会话。...必须 Cookie 指定名称。 0185 默认属性丢失。未找到对象默认属性。 0186 证书分析错误。 0187 对象添加冲突。无法将对象添加到应用程序。应用程序被另一个要求添加对象请求锁定。...0227 Server.Execute 失败调用 Server.Execute 失败。 0228 Server.Execute 错误。加载此页时调用 Server.Execute 失败。...0229 Server.Transfer 失败调用 Server.Transfer 失败。 0230 Server.Transfer 错误。加载此页时调用 Server.Transfer 失败

5.7K20

关于WinExec和System比较

⑶ 返回值:   若函数调用成功,则返回值大于31。若函数调用失败,则返回值下列之一:   ① 0:系统内存或资源已耗尽。   ...② ERROR_BAD_FORMAT:EXE文件无效(非Win32.EXE或.EXE影像错误)。   ③ ERROR_FILE_NOT_FOUND:指定文件未找到。   ...⑶ 返回值:   若函数调用成功,则返回值大于32,否则为一个小于等于32错误值。   说明:可以用此函数打开或搜索一个外壳文件夹。...⑶ 返回值:   若函数调用成功,则返回值不为0;若函数调用失败,返回值0。   ShellExecute和WinExec命令用于简单作业。...要注意,针对CreateProcess一些参数控制台应用程序是特定,而其它参数则各种应用程序有用。大多数情况下,并不一定要填入STARTUPINFO结构,但无论如何必须提供它。

98120

HTTP 响应状态码全解

当我们进行 API 测试时,通常首先会检查 API 调用返回响应状态码。这就要求我们必须熟悉那些最常见 HTTP 状态码,以便我们能够更快地识别问题。...301-永久移动,状态代码指示目标资源已分配了一个新永久 URI,并且将来该资源任何引用都应使用其中一个封闭 URI。 302-找到,状态代码指示目标资源暂时驻留在不同 uri 下。...404 未找到 404(未找到)状态代码指示源服务器没有找到目标资源的当前表示,或者不愿意公开存在表示。...415 不支持媒体类型 415(不支持媒体类型)状态代码表示源服务器拒绝请求提供服务,因为有效负载格式不受目标资源上此方法支持。...请求范围不满足 417 预期失败 418 我是个茶壶,超文本咖啡罐控制协议,但是并没有被实际HTTP服务器实现 421 错误请求 422 不可处理实体 423 锁定 424 失败依赖关系 426

2.7K30

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

这其中可以归两类, 一类是 针对单独接口处理 二类是 针对所有接口需要内容 针对单独接口处理 请求前参数处理 请求后返回值处理 针对所有接口处理 Post Get Put Del 拦截器...代码异常处理 统一调用 随着我们 Api 越来越多,我们可能需要给他们不同分类,但我们并不希望每次调用都从不同文件夹引入不同 Api ,因此在 基础请求 + 拦截器 之外,我们还需要一个封包操作...针对所有接口处理(Get) 我们希望以 const [e, r] = await api.getUserInfo(id) 方式调用,代表着我们需要保证返回值稳定返回 [err, result] ,...所以我们需要在请求无论成功失败时,都以 resolve 方式调用。...觉得大家有帮助

4.2K20

FlowableEngine支持事件类型

请确保引用类在classpath中,并且保证表达式能够解析有效实例。 通过API分发事件 可以通过API提供事件分发机制,向任何在引擎中注册监听器分发自定义事件。...org.flowable…​FlowableEvent ENGINE_CLOSED 本监听器所属流程引擎已经关闭,不能再该引擎进行API调用。...作业会由于API调用取消,任务完成导致关联边界定时器取消,也会由于新流程定义部署而取消。...该事件activityId处理错误节点。如果错误成功传递,后续会为节点发送 ACTIVITY_SIGNALLED 或 ACTIVITY_COMPLETE 消息。...org.flowable…​FlowableErrorEvent UNCAUGHT_BPMN_ERROR 抛出了未捕获BPMN错误。流程没有该错误处理器。该事件activityId空。

1.5K30

腾讯云 API 最佳实践: 善用幂等性

同样,修改操作你也不会关心上一次结果,当你重复调用修改操作时,只要这一次成功了,目的就算达到了,如果失败了,再重试(如果可重试的话)直到成功即可。删除操作同理。...如果这一次你调用接口失败了,例如在返回结果前网络中断了,死机了,你设置超时时间太短提前关闭了连接等等,服务器当前状态你是不知道。...何况每一个请求都有 RequestId 标识符,这个标识符每次都不一样以区别不同请求。 再比如云服务器另一个接口“退还实例”,如果退还成功,它会正常返回。当你再次退还,会返回资源未找到错误信息。...在调用者看来,可能会发生第一个返回是内部异常,第二个返回是正常预期结果情况。严格来说,这并不是幂等,但是只要调用者合理安排,这种情况是可以避免,例如失败请求后你可以休眠几十毫秒到几秒再去请求。...这是一个发展过程,还请用户谅解,并我们产品 API 监督和督促,提出意见和建议,共同成长,创造价值。

6.8K150

卷起来了,Apache Flink 1.13.6 发布!

您将在下面找到所有错误修复和改进列表(不包括构建基础架构和构建稳定性改进)。有关所有更改完整列表,请参阅JIRA列表。 我们强烈建议所有用户升级到 Flink 1.13.6。...,HistoryServer 会删除缓存存档 [ FLINK-20195 ] - Jobs 端点返回重复作业 [ FLINK-20370 ] - sink 主键与查询不同时结果错误 [ FLINK-...REST API 提交作业时,JM 上 ThreadLocals ClassLoader 泄漏 [ FLINK-25067 ] - 更正 RocksDB 后台线程描述 [ FLINK-25084...找到重复项 [ FLINK-25091 ] - 官网文档FileSink orc压缩属性引用错误 [ FLINK-25096 ] - flink 1.13.2 中异常 API(/jobs/:jobid...枚举 [ FLINK-25160 ] - 使文档清晰:可容忍失败检查点计数连续失败 [ FLINK-25415 ] - 实现 Cassandra 容器连接重试 [ FLINK-25611 ] -

1.5K40

Flink吐血总结,学习与面试收藏这一篇就够了!!!

CoGrouped侧重是Group,对数据进行分组,是同一个key上两组集合进行操作 Join侧重是数据同一个key每一元素进行操作 ConnectedStreams(表示两个数据流组合...结构 作业调度失败 失败异常分类 NonRecoverableError:不可恢复错误。...此类错误意味着即便是重启也无法恢复作业到正常状态,一旦发生此类错误,则作业执行失败,直接退出作业执行 PartitionDataMissingError:分区数据不可访问错误。...这种错误需要在调度策略上进行改进,如使用黑名单机制,排除有问题机器、服务,避免将失败Task重新调度到这些机器上。...如果提交失败,Flink应用会重启,并调用TwoPhaseCommitSinkFunction#recoverAndCommit方法尝试恢复并重新提交事务。 abort。一旦终止事务,删除临时文件。

74520

【高并发写】库存系统设计

0 大纲 支持 CnG 库存管理挑战 他们理想库存平台技术需求 功能架构 MVP 后解决方案增量更改 —— 将单个商品 API 更改为批量 API —— 数据库表优化 —— 在一个请求中批量上传...下图显示他们库存摄入流水线顶层设计,一个异步系统,从多个不同来源摄入库存,其进行处理并传递给下游系统,在那里面向客户实体提供视图。...无库存预测分类 —— 预测模型,通过学习历史订单和 INF(商品未找到)数据,商品是否可以在店内提供进行分类。...4  MVP 后解决方案增量更改 4.1 将单个商品 API 更改为批量 API MVP 版本,构建了一个单个商品 API,要创建/更新一个商品,调用者需要调用他们 API 一次。...如果一个商店有 N 个商品,调用者将需要调用 N 次 API,这可并行发生 让我们再次考虑用例:当他们更新一个商店时,调用者已经知道完整商品列表,他们可以通过一次 API 调用发送完整商品列表。

20510

详细自定义封装Axios请求库,你还不会二次封装吗?

// 响应错误做点什么 return Promise.reject(error); }); 那我们还是使用箭头函数来写,这里我先给出所以代码,在分段解析。...这里还只是保存错误信息,还没有调用elementUI弹出层哦! 是不是很方便呢?...没有我们就默认给他抛出一个error.message = '连接服务器失败'。 弹出提示: 不要忘了,我们还只是保存错误提示字符串,没有调用elementUI弹出层组件,我们最后调用一下。...然后返回中调用request,也就是axios实例,将配置携带在里面,这样这个config对象里面的配置就会与axios实例字段信息相互补充,相当于axios实例增加了method、url以及数据(...这一层请求信息封装也就好了,目的是补充配置。 封装请求方法 我们在封装一次调用方法,便于调用请求。 创建一个js文件,我这是api.js。

5.1K40

WinExec, ShellExecute, CreateProcess

返回值:   若函数调用成功,则返回值大于31。若函数调用失败,则返回值下列之一:   ① 0:系统内存或资源已耗尽。   ...② ERROR_BAD_FORMAT:EXE文件无效(非Win32.EXE或.EXE影像错误)。   ③ ERROR_FILE_NOT_FOUND:指定文件未找到。   ...返回值:   若函数调用成功,则返回值不为0;若函数调用失败,返回值0。   ShellExecute和WinExec命令用于简单作业。...⑶ 返回值:   若函数调用成功,则返回值大于31。若函数调用失败,则返回值下列之一:   ① 0:系统内存或资源已耗尽。   ...⑶ 返回值:   若函数调用成功,则返回值不为0;若函数调用失败,返回值0。   ShellExecute和WinExec命令用于简单作业

1.3K20

无规矩不成方圆,聊一聊 Spring Boot 中 RESTful 接口设计规范

FTP协议(File Transfer Protocol,简称FTP),是一套标准文件传输协议,用于传输文件,如.txt,.csv等,一般文件传输,采用FTP协议 HTTP协议,适用一般安全性要求比较低或没要求业务情景...HTTPS=HTTP+SSL,适用于安全性要求较高业务情景 4.路径规则 由于api获取是一种资源,所以网址中尽量为名词,而非动词 /api/v1.0/pruduct/2019 /api/v1.0...producy_type=1:筛选条件 10.返回数据格式 返回数据格式,一般包括三个字段: (1)失败情况(状态码、错误码和错误描述) { “status”:0,//状态码 0-表示失败,1-表示成功...“error_code”:”2003”,//错误码,一般在设计时定义 “error_des”:”身份验证失败”//错误描述,一般在设计时定义 } (2)成功情况(标识id,数据对象,状态码) {...13.定义api界限 任何api,从权限上,可归结为匿名api和非匿名api,前者不需要验证,后者需要验证 14.定义api返回码 在api设计时,要定好api返回码,如 1 --授权过期 404--未找到资源

37030

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

API测试用于确定输出是否结构良好,是否另一个应用程序有用,根据输入(请求)参数检查响应,并检查API检索和授权数据所花费时间。...可在Postman中使用API调用方法: ? 根据API调用标头: ? 根据API调用正文信息: ? 然后,您可以通过单击Send按钮来执行API调用。...400  - 对于错误请求。请求无法理解或缺少任何必需参数。 401  - 对于未经授权访问。身份验证失败或用户没有所请求操作权限。 403  - 被禁止,访问被拒绝。...404  - 未找到数据。 405  - 不支持方法或不允许请求方法。 500  - 内部服务器错误。 503  - 服务不可用。...它具有简单语法,使测试更易于编写和读取。 错误处理。 如果脚本中出现错误,则只有一个测试失败,而其他测试仍在运行,并显示错误。 丰富断言。

3.8K30

python基于集合列表实现学生管理系统增删改查功能

前言 这是一个python基于集合列表实现学生管理系统增删改查功能期中考试作业,大家有需要可以自取。...自己改改 增删改查函数里边内容即可~~~ 不罗嗦,直接上最终实现效果 本篇文章基础文章,大佬可以直接略过!!!避免浪费时间哈!...以下操作以小白例。...student = {"姓名": name, "年龄": age, "性别": gender} students.append(student) print("成功") 这里我们调用了...") 这个代码,使用了for迭代students列表里边每一个学生对象,并通过student["姓名"]取出指定对象值与我们查找学生name进行匹配,如果匹配那么进入修改选项, 这里修改思路,说白了就是重新赋值字典键值

16000
领券