第6章 服务门面:Web API 本章要回答的三个问题:一、什么样的 API 才称得上 RESTful,设计时到底在遵守什么原则?二、ApiController 那行特性给管线加了什么工,接口的请求与响应处理和 MVC 页面通道有何不同?三、异步编程为什么是接口的生死线,接口版本又该怎么演进才不伤客户端? 为什么会有这一章 前五章产出的是"给人看的页面",本章把管线重新封装成"给程序看的门面"。Web 应用迟早要对外或对前端单页应用提供数据接口——移动端、小程序、第三方集成,消费方都是代码而不是浏览器。观察哨在本章看到的变化全在管线的出站段:路由变成纯特性风格,动作返回的对象不再找视图引擎,而是经内容协商器序列化成 JSON。
本章要回答的三个问题:一、什么样的 API 才称得上 RESTful,设计时到底在遵守什么原则?二、ApiController 那行特性给管线加了什么工,接口的请求与响应处理和 MVC 页面通道有何不同?三、异步编程为什么是接口的生死线,接口版本又该怎么演进才不伤客户端?
前五章产出的是"给人看的页面",本章把管线重新封装成"给程序看的门面"。Web 应用迟早要对外或对前端单页应用提供数据接口——移动端、小程序、第三方集成,消费方都是代码而不是浏览器。观察哨在本章看到的变化全在管线的出站段:路由变成纯特性风格,动作返回的对象不再找视图引擎,而是经内容协商器序列化成 JSON。
有意思的是,本章几乎不引入新管线——ApiController 是 MVC 控制器的接口装扮,模型绑定照旧(3.3 节),过滤与错误处理复用管线机制(2.2 节),数据层就是第 5 章的 LINQ。新东西只有三样:接口设计的领域素养(REST 与状态码的语义)、内容协商这一站、以及异步与版本化这两个工程生死线。
| 节 | 回答哪个问题 | 关键产出 |
|---|---|---|
| 6.1 RESTful API 设计原则 | 第一个问题 | 资源与方法语义矩阵 + 设计评审清单 |
| 6.2 Web API 控制器与请求响应处理 | 第二个问题 | ApiController 行为实验 + 内容协商流程图 |
| 6.3 异步编程与 API 版本管理 | 第三个问题 | 线程池饥饿案例 + 版本策略选型 |
6.1 是设计素养(评审别人的接口也用得上),6.2 是管线知识( ApiController 与协商器都发生在管线里),6.3 是工程底线(异步与版本都做错会直接造成生产事故)。三节依次从"设计"到"实现"到"运营"。
接口通道架好之后,数据从页面后台走向了开放世界,下一个问题自然是"谁能进来"。第 7 章把观察哨移到管线最前排——认证与授权两站,正是 2.2 节强制次序对里的 Authentication 与 Authorization。本章 401 与 403 的语义伏笔,会在那里得到完整展开。