REST(Representational State Transfer)是一种用于网络化应用的架构风格(architectural style),由 Roy Fielding 定义。它不是一个协议或标准——而是一组约束(constraints),遵循它们能让 API 可扩展、可缓存、易于演进。一个“RESTful”的 API 把一切都建模为由 URI 标识的资源(resource)(user、order、product),并用标准的 HTTP method 来操作它们。
GET /users/42 HTTP/1.1
Host: api.example.com
Accept: application/json
HTTP/1.1 200 OK
Content-Type: application/json
{ "id": 42, "name": "Ann", "email": "[email protected]" }
URI /users/42 命名了资源;GET 是动作;JSON 是 representation。这种组合——path 中是名词、动词是 HTTP method——正是 REST 的精髓。
REST 是 web API 的主导风格,因此面试官用这道题来检查你是否理解它为什么有效,而不仅仅是会拼写它。实践中最重要的两个约束是 statelessness(每个请求自包含,因此你可以在 load balancer 后面放任意数量的 server 并横向扩展,无需 sticky session)和 uniform interface(可预测、面向资源的 URL 加上标准的 HTTP method 和 status code,这意味着 client 不需要为每个 endpoint 写专门的逻辑)。一个强的回答会把这些约束与具体收益联系起来——stateless 使扩展成为可能、cacheable 降低负载、layered system 让你能插入 CDN 和 gateway——并指出大多数“REST”API 是实用主义的,而非完全 RESTful(很少有实现 HATEOAS)。理解这些约束,是其他所有 REST 设计决策的基础,从选择 status code 到 versioning。
一个包含详细解答的 IT 面试题库——从初级到高级。
捐赠