RESTFUL规范

RESTFUL规范,一种软件的架构风格,设计风格,而不是标准,为客户端和服务端的交互提供一组设计原则和约束条件。

规范建议

1.面向资源编程:

每个URL代表一种资源,URL中尽量不要用动词,要用名词,往往跟数据库的表明相对应。

一般来说,数据库中的表都是同种记录的集合,所有API中的名词也用该使用复数。

举例来说,有一个API提供动物园(zoo)的信息,还包括各种动物和雇员的信息,则它的路径应该设计成下面这样。

https://api.example.com/v1/zoos

https://api.example.com/v1/animals

https://api.example.com/v1/employees

2.HTTP动词:

对于资源的具体操作类型,由HTTP动词表示

GET(SELECT):从服务器取出资源(一项或多项)。

POST(CREATE):在服务器新建一个资源。

PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。

PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。

DELETE(DELETE):从服务器删除资源。

3.在URL中体现版本:

https://www.bootcss.com/v1/

https://v1.bootcss.com/

4.在URL中体现是否是API:

https://www.bootcss.com/api/mycss

https://api.bootcss.com/mycss

5.在URL中的过滤条件:

如果记录的数量很多,服务器不可能都将他们返回给用户。API应该提供参数,过滤返回结果。

?limit=10:指定返回记录的数量

?offset=10:指定返回记录的开始位置。

?page=2&per_page=100:指定第几页,以及每页的记录数。

?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序。

?animal_type_id=1:指定筛选条件

6.尽量使用HTTPS:

https://www.bootcss.com/v1/mycss

7.响应时设置状态码:

1** 信息,服务器收到请求,需要请求者继续执行操作

2** 成功,操作被成功接收并处理

3** 重定向,需要进一步的操作以完成请求

4** 客户端错误,请求包含语法错误或无法完成请求

5** 服务器错误,服务器在处理请求的过程中发生了错误

8.返回值:

GET请求 返回查到所有或单条数据

POST请求 返回新增的数据

PUT请求 返回更新数据

PATCH请求 局部更新 返回更新整条数据

DELETE请求 返回值为空

9.返回错误信息:

如果状态码是4xx,就应该向用户返回出错信息。一般来说,返回的信息中将error作为键名,出错信息作为键值即可。

error: "Invalid API key"

10.Hypermedia API

如果遇到需要跳转的情况,携带跳转接口的URL

Hypermedia API的设计,比如github的API就是这种设计,访问api.github.com会得到一个所有可用的API的网址列表。

"current_user_url": "https://api.github.com/user",

"authorizations_url": "https://api.github.com/authorizations",

从上面可以看到,如果想获取当前用户的信息,应该去访问 api.github.com/user,就会得到下面的记录

message: "Requires authentication",

documentation_url: "https://developer.github.com/v3/users/#get-the-authenticated-user"

11.其他:

API的身份认证应该使用OAuth 2.0

服务器返回的数据格式,应该尽量是JSON格式,避免使用XML

### RESTful API设计规范与最佳实践 RESTful API 是一种基于资源的架构风格,广泛应用于现代 Web 开发中。以下是关于 RESTful API 的详细设计规范和最佳实践: #### 1. 资源标识 RESTful API 的核心是资源,每个资源都应通过唯一的 URI(Uniform Resource Identifier)进行标识。推荐使用名词而非动词来命名资源,并且以复数形式表示集合资源。例如: - 正确示例:`/users`、`/orders` - 错误示例:`/getUser`、`/placeOrder` 此外,嵌套资源可以通过路径层级表示关联关系。例如,获取用户 `123` 的订单可以使用以下 URL[^1]: ```plaintext /users/123/orders ``` #### 2. HTTP 方法 RESTful API 应严格遵循 HTTP 方法语义,确保操作的语义清晰且一致。常见的 HTTP 方法及其用途如下: - **GET**:用于获取资源,不应产生副作用。 - **POST**:用于创建新资源。 - **PUT**:用于更新或替换整个资源。 - **PATCH**:用于部分更新资源。 - **DELETE**:用于删除资源。 例如,创建一个新用户可以通过以下请求实现: ```http POST /users Content-Type: application/json { "name": "John Doe", "email": "john.doe@example.com" } ``` #### 3. 状态码 HTTP 状态码是客户端理解服务器响应的重要依据。RESTful API 应根据操作结果返回适当的 HTTP 状态码。例如: - 成功创建资源时返回 `201 Created`。 - 成功更新资源时返回 `200 OK` 或 `204 No Content`。 - 资源不存在时返回 `404 Not Found`。 - 客户端请求无效时返回 `400 Bad Request`。 #### 4. 错误处理 清晰的错误处理机制有助于提高 API 的可用性和用户体验。推荐在错误响应中包含详细的错误信息,例如: ```json { "error": { "code": 400, "message": "Invalid request body", "details": "The 'email' field is missing." } } ``` #### 5. 响应格式 RESTful API 通常使用 JSON 格式作为数据交换的标准。响应应结构化且易于解析。例如: ```json { "id": 123, "name": "John Doe", "email": "john.doe@example.com" } ``` #### 6. 分页与过滤 对于大规模数据集,API 应支持分页和过滤功能,以减少不必要的数据传输。例如: ```http GET /users?page=2&size=10&filter=status:active ``` #### 7. HATEOAS HATEOAS(Hypermedia As The Engine Of Application State)是一种增强 API 可发现性的机制。通过在响应中包含链接,客户端可以导航到相关资源。例如: ```json { "id": 123, "name": "John Doe", "email": "john.doe@example.com", "_links": { "self": { "href": "/users/123" }, "orders": { "href": "/users/123/orders" } } } ``` #### 8. 缓存 为了提升性能,RESTful API 应尽可能支持缓存机制。通过设置合适的 HTTP 头部字段(如 `Cache-Control` 和 `ETag`),客户端可以有效利用缓存数据[^4]。 #### 9. 安全性 API 安全性是设计中的关键环节。推荐使用 HTTPS 协议保护数据传输,并结合 OAuth 2.0 等标准实现身份验证和授权。 --- ### 示例代码 以下是一个简单的 Java Spring Boot 实现 RESTful API 的示例: ```java @RestController @RequestMapping("/users") public class UserController { @GetMapping("/{id}") public ResponseEntity<User> getUser(@PathVariable Long id) { User user = userService.findById(id); if (user == null) { return ResponseEntity.notFound().build(); } return ResponseEntity.ok(user); } @PostMapping public ResponseEntity<Void> createUser(@RequestBody User user) { User savedUser = userService.save(user); return ResponseEntity.created(URI.create("/users/" + savedUser.getId())).build(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值