使用Web API为应用程序的开发者提供服务是软件工程师具成就的工作之一。但是如何创造一个具有活跃开发者生态系统的、受欢迎的API,也是软件工程师具挑战的工作之一。有了这本实用指南,开发者、产品经理、架构师、开发相关专业人员和技术领导都能够从中学习如何在设计、扩展、营销和持续开发可交互操作的API的复杂决策过程中找到正确的方向。
构建一个受欢迎的开发者平台和一个被数百万开发者使用的API是一名软件工程师在职业生涯中最具挑战和最具成就的工作之一。你将在本书中学会如何完成这一工作。API是现代软件开发的核心。它为开发者解决了一个常见的难题:作为一名软件工程师,如何将自己的代码公开给其他开发者去使用,以及如何让他们基于自己的代码进行创新。现代软件开发的过程非常像搭建乐高积木。作为开发者,你可以访问大量提供公开服务的API,这些服务涵盖支付、通信、授权和身份认证等领域。在构建一个新的软件时,软件工程师的工作就是使用这些API来组合新产品,重用他人的代码可以大大节省自己的时间,并且可以避免一些重复造轮子的工作。很多软件工程师在小时候很喜欢玩乐高,长大后依然如此。谁又不爱玩乐高呢?毕竟乐高那么有趣,可以使用那些彼此无缝连接的彩色碎片拼接出满意的东西。但是如果可以自己创建乐高积木本身呢?如果不仅可以创建乐高套件,还可以创建乐高零件本身,并让其他人基于你的成果进行创新,那不更好吗?在你构建自己的API时,实际上就是在为其他开发者创建你自己的乐高零件。API在计算机科学领域并不算什么新概念,早在20世纪60年代,一些开发者就开始为第一种编程语言构建开发者之间共享的标准库,让其他开发者可以在不知道标准库内部代码的情况下使用这些标准库提供的功能。在20世纪70年代和20世纪80年代,随着网络的诞生,计算机之间开始相互连接,第一个网络API随之出现,开发者们开始通过远程过程调用(Remote Procedure Call,RPC)的方式调用网络API所暴露出来的一些服务。有了远程过程调用,开发者们开始通过网络提供功能和调用远程库,就像使用本地资源一样。像Java这样的编程语言提供了进一步的抽象和复杂度,它们使用消息中间件服务器来管理和组织这些远程服务。在20世纪90年代,随着互联网的兴起,许多公司希望标准化构建和公开API的方式。例如,Microsoft的公共对象请求代理体系结构(Common Object Request Broker Architecture,CORBA)、组件对象模型(Component Object Model,COM)和分布式组件对象模型(Distributed Component Object Model,DCOM)等标准都试图成为在网络上提供服务的一种可执行的标准。但问题是这些标准大多数管理起来很复杂,并且要求在网络的两端使用类似的编程语言,有时还需要在本地安装部分远程服务(通常称为桩代码Stub)才能进行访问。这种情况可以说是一团糟。互联统一的梦想很快变成了配置和限制的噩梦。在20世纪90年代末期和21世纪早期,通过网络应用程序接口(Web API)访问远程服务的方式成为一种更加开放和标准的方式。首先是简单对象访问协议(Simple Object Access Protocol,SOAP)和可扩展标记语言(Extensible Markup Language,XML)得到了广泛使用;然后,表现层状态转换(Representational State Transfer,REST)和JavaScript对象表示法(JavaScript Object Notation,JSON)开始流行,这些技术使访问远程服务变得更加容易和标准化,而且不依赖于任何客户端代码或编程语言。我们将在本书中介绍这些比较受欢迎和有用的技术。
[美]布伦达·金(Brenda jin)是一位企业家和软件工程师。作为Slack开发者平台团队的一名工程师,她的工作是为第三方开发者设计、构建和扩展API。作为GirlDevelop It的董事会成员和分会负责人,Brenda为众多开源教材做出了贡献,并使数千名女性有能力学习网络和软件开发。
苏拉布·萨尼(Saurabh Sahni)是Slack开发者平台团队的一名工程师。在过去的八年中,他一直在构建和设计开发者平台和API。在Slack工作之前,Saurabh领导了一个负责Yahoo!开发者网络基础架构和开发者工具的工程师团队,在那里他帮助推出了Yahoo!移动开发者组件和一些API。
埃米尔·舍瓦特是Twitch的开发者经验副总裁。过去15年来,他一直在Slack、Microsoft和Google围绕API构建开发者产品、API和生态系统。他也是《Designing Bots》(O'Reilly)的作者。
前言
第1章 什么是API
为什么我们需要API
谁是我们的用户
API的商业案例
内部开发者优先使用,外部开发者次之的API
外部开发者优先使用,内部开发者次之的API
作为产品的API
如何让API更出色
小结
第2章 API范式
请求一响应式API
表现层状态转换REST
远程过程调用RPC
GraphQL
事件驱动式API
WebHOOkS
WebSOCket
HTTP Streaming
小结
第3章 API安全
身份认证和授权
OAUth
令牌生成
权限范围
令牌和权限范围验证
令牌过期和令牌刷新
展示和撤销授权
OAuth最佳实践
WebHooks安全
令牌验证
请求签名和WebHooks签名
双向传输层安全
精简负载和API获取
WebHooks安全最佳实践
小结
第4章 设计最佳实践
基于真实用例而设计
设计出色的开发者体验
使API能快速而轻松地入门
保持一致性
简化故障排除过程
让你的API可扩展
小结
第5章 设计实践
场景
定义业务目标
概述关键用例
……
第6章 扩展API
第7章 管理更新
第8章 构建开发者生态系统
第9章 开发者资源
第10章 开发者计划
第11章 总结
附录 API设计工作表
作者介绍
封面介绍