2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

Heroku 的 HTTP API 设计指南

  • 2014-09-03
  • 本文字数:1653 字

    阅读完需:约 5 分钟

Wesley Beary 是 Heroku API 团队的成员,他整理了一份用于创建 HTTP+JSON API 的指南,并以非常精炼的语言对该指南进行了陈述。

该指南以若干条建议开始:

  • 需要所有的 API 调用都使用 TLS。针对非 TLS 的调用以 403 Forbidden 进行回应
  • 始终对 API 进行版本化。使用 Accept 头部来指定版本。需要客户端指定 API 版本,而不是简单地以默认版本进行回应。
  • 使用 ETag 头部来支持资源的缓存
  • 识别出每个具有 X-Request-ID 的响应;这对达成日志跟踪或调试等目的会非常有用
  • 使用 Range, Content-Range, Next-Range 来处理数据量较大的响应

针对发出的请求,该指南提到了如下几点:

  • 返回合适的状态码,例如 200: 成功的 GET 或 同步的 DELETE, PATCH

    201: 成功且同步的 POST

    401: 未经授权的调用

    429: 请求频率超过限制

    等等。

  • 当可用时总是返回完整的资源

  • 接受请求中那些与 JSON 响应对称的序列化 JSON

  • 使用一致的路径格式。除非特指单例,否则资源名称应该使用复数的形式

  • 路径和属性都使用小写字母,从而与主机名保持对齐

  • 允许为某些资源指定除 UUID 以外的名称,例如像应用的名称

  • 尝试通过尽可能将资源配置到离根路径较近的路径位置来限制资源嵌套的深度

当谈到关于响应的部分,Beary 建议如下:

  • 为每个资源使用全局唯一的 ID
  • 为资源提供标准的时间戳
  • 针对时间戳,应该使用格式为 ISO8601 的 UTC 时间
  • 将外键关系嵌入到当前资源从而可以包含更多关联资源的详情,并且无须修改响应的结构,
  • 提供详细的错误信息,包括一个机器可读的 ID、一段人类可读的错误消息以及一个可选的指向更多细节的 URL
  • 设定一个请求频率限制,然后可以使用一个像 RateLimit-Remaining 这样的头部来在每个响应中告知客户端可用请求令牌的剩余请求数量
  • 应该对所有响应中的 JSON 进行压缩

该指南还包括了更多的相关忠告:

  • 以机器可读的格式提供 JSON schema
  • 包括为开发者而准备的详细的 API 文档
  • 允许开发者测试 API
  • API 应该根据它们的稳定性状态分别标记为:原型(prototype)/ 开发(development)/ 生产(production)

我们就如何总结出这些指南以及如何对它们中的部分进行解释向 Beary 进行了采访。

InfoQ:你从一开始就拥有一份 API 设计指南吗?

WB: 我从早期就拥有了一部分指南,但是它们都相当地粗糙,且仅仅存在于我的脑海之中。自从我开始 github.com/fog/fog 上及其相关的工作以来,我已经消费过很多不同的 API,这帮助我近一步形成了这些观点。

InfoQ:如果你一开始没有这些指南,那么你是如何开发 API 的?通过不断的迭代吗?

WB: 因为缺乏一个更加正式的指南,这无疑会是一个迭代的过程。不幸的是,除了有点慢之外,迭代的过程也是无法伸缩的,它成为了我向 API 新增内容的障碍。所以我们构建了该指南来推动这些决策制定的分发工作。我们会继续进行迭代,但是就指南本身而言通常现在也处于迭代之中。我们可以看到有很多正在进行中的讨论( github.com/interagent/http-api-design/issues ),伴随着我们学习到更多的经验以及其他开发者对这些指南的采用,这些讨论将持续对我们的这个文档进行阐明和发展。

InfoQ:为什么建议在针对 PUT 或 DELETE 操作时返回整个资源?

WB:异常情况是接口和指南中的对立部分。有时客户端期望得到整个资源,而出于对优化的考虑我们通常会对客户端的这种期望不加理会。我认为可以将该行为视为是可选的,通常可选的行为在很多场景中都是有意义的,但是具备一个简单、有用的默认选项是有价值的。也就是说,这是一个有争议的观点,而在 https://github.com/interagent/http-api-design/issues/9 上可以找到一些正在进行中的讨论,它们对这个观点的优缺点进行了更加深入地探讨。

InfoQ:为什么只使用 ISO8601 格式的 UTC 时间?

WB: 这与返回整个资源相似,具有一致的规则(不考虑异常)可以更容易地对你正在做的事情进行思考,从而减少你在设计某些事物的时候需要做出决策的次数。同样的,时区是疯狂而可怕的。我已经记不清我所遇到或引起的与时区相关的错误次数了。为了有望减少问题,我们选择了一个我们所熟知的时区和格式来在各方面进行使用。

查看英文原文: Heroku’s HTTP API Design Guide

2014-09-03 01:2011440
用户头像

发布了 52 篇内容, 共 23.8 次阅读, 收获喜欢 5 次。

关注

评论

发布
暂无评论
发现更多内容

BeeWorks Meet:为企业打造专属的私有化线上会议系统

BeeWorks

即时通讯 即时通讯IM 私有化部署 企业级应用 局域网视频软件

HarmonyOS @Reusable 装饰器自学指南:高性能组件复用实战指南

李游Leo

@Reusable

2.5D封装为何成为AI芯片的“宠儿”?

E科讯

鸿蒙摄像机,一场智能安防的“平权革命”

脑极体

AI

等保测评取消打分《网络安全等级测评报告模版(2025版)》变更

黑龙江陆陆信息测评部

湖北文旅智能化财务共享中心正式上线,树立文旅行业数字化转型新标杆

用友智能财务

财务 会计

怎么用DeepSeek生成甘特图?DS高阶使用技巧分享!

职场工具箱

甘特图 在线白板 AIGC AI 绘图 DeepSeek

SvelteKit 最新中文文档教程(12)—— 高级路由

冴羽

React Svelte SvelteKit

全民豪车时代,享界S9增程版靠什么“一鼎定乾坤”?

脑极体

AI

“数字创新产品课程” 4月25-26日 · CSPO认证在线课程

ShineScrum

产品负责人 CSPO认证

数字藏品NFT的智能合约开发

北京木奇移动技术有限公司

数字藏品 软件外包公司 音乐NFT 体育NFT

智能制造:数字化转型的五大陷阱

积木链小链

数字化转型 制造业 智能制造

数据无界、湖仓无界,Apache Doris 湖仓一体典型场景实战指南(下篇)

SelectDB

数据湖 Doris LakeHouse trino 湖仓一体

全民豪车时代,享界S9增程版靠什么“一鼎定乾坤”?

脑洞汽车

AI

HarmonyOS:ArkTS 显式动画 animateTo 自学指南

李游Leo

HarmonyOS

项目管理系统(源码+讲解+演示)

深圳亥时科技

dbops 助力 GreatSQL 单机架构安装部署

GreatSQL

谁是 AI 搜索先锋?阿里云携手 Elastic 正式启动先锋者招募!

阿里云大数据AI技术

elastic 阿里云 搜索 AI搜索

外贸人必看!三步用云手机轻松收集产品反馈

Ogcloud

云手机 海外云手机 舆情监控 舆情监测 海外舆情监控

昆仑万维发布 Mureka TTS API 和音乐推理大模型;通义发布小尺寸端到端多模态模型 Qwen2.5-Omni丨日报

声网

HarmonyOS:动画 motionPath 、 animateToImmediately API自学指南

李游Leo

HarmonyOS

平安证券 NoETL 指标平台实践:统一数据口径,驱动高效经营分析与智能决策

Aloudata

数据仓库 数据分析 大模型 指标平台 万数皆可问

“PO高阶精进课程” 5月10-11日 · A-CSPO认证【提前报名特惠】

ShineScrum

2025年企业组网新趋势:SASE与SD-WAN发展解析

Ogcloud

SD-WAN 组网 企业组网 企业网络 SD-WAN服务商

数字藏品(NFT)项目的上线流程

北京木奇移动技术有限公司

软件外包公司 音乐NFT 体育NFT

MES系统助力漆包线工厂,轻松攻克生产管理难点

万界星空科技

数字化 mes 漆包线mes 漆包线 制造业工厂

Karmada Dashboard 首个版本发布!开启多云编排可视化新篇章

华为云原生团队

云计算 容器 云原生

MySQL 优化利器 SHOW PROFILE 的实现原理

不在线第一只蜗牛

MySQL 数据库

HarmonyOS:动画 motionPath 、 animateToImmediately API自学指南

李游Leo

HarmonyOS

让企业沟通更顺畅,BeeWorks Meet局域网视频软件的五大优势

BeeWorks

音视频 即时通讯 IM 私有化部署 局域网视频软件

JimuReport 积木报表 v1.9.5发布,免费的可视化报表

JEECG低代码

报表 可视化数据 报表打印 数据报表

Heroku的HTTP API设计指南_语言 & 开发_Abel Avram_InfoQ精选文章