自学内容网 自学内容网

【学习】RESTful API

什么是RESTful API

RESTful API 是一种设计风格,用于构建网络应用程序的 API。它基于 REST(Representational State Transfer)原则,提供了一种简单、灵活、可伸缩的方式来构建 Web 服务。RESTful API 设计的关键原则包括:

1. **资源(Resources)**:在 RESTful API 中,所有的数据都被视为资源。每个资源都有一个唯一的标识符(通常是 URL),客户端可以通过这个标识符来访问和操作资源。

2. **HTTP 方法**:HTTP 方法(如 GET、POST、PUT、DELETE)用于表示对资源的不同操作。例如,使用 GET 方法来获取资源,使用 POST 方法来创建资源,使用 PUT 方法来更新资源,使用 DELETE 方法来删除资源。

3. **状态无关性(Statelessness)**:RESTful API 是无状态的,每个请求都包含了足够的信息来处理该请求,服务器不会保存客户端的状态。这意味着每个请求都是独立的,服务器不需要维护会话信息。

4. **统一接口(Uniform Interface)**:RESTful API 的接口应该是统一的,即使用标准的 HTTP 方法和状态码来操作资源。此外,资源的表示应该是自描述的,客户端不需要额外的文档来理解如何使用 API。

5. **资源关系**:资源之间可以有关系,例如父子关系、引用关系等。在设计 RESTful API 时,应该考虑如何表示这些关系,以便客户端能够轻松地导航资源之间的关系。

6. **无状态交互(Stateless Interaction)**:客户端与服务器之间的交互应该是无状态的,每个请求都应该包含所有必要的信息,服务器不应该依赖于之前的请求或会话状态。

通过遵循这些原则,RESTful API 提供了一种简单而灵活的方式来构建 Web 服务,使得不同的系统能够轻松地相互通信和交互。

一个例子

安装了Flask:

pip install Flask

创建一个 Python 文件 app.py

from flask import Flask, jsonify, request

app = Flask(__name__)

# 假设这是我们的待办事项列表
todos = [
    {'id': 1, 'title': '学习Python', 'completed': False},
    {'id': 2, 'title': '写一个项目', 'completed': False}
]

# 获取所有待办事项
@app.route('/todos', methods=['GET'])
def get_todos():
    return jsonify(todos)

# 获取特定ID的待办事项
@app.route('/todos/<int:todo_id>', methods=['GET'])
def get_todo(todo_id):
    todo = next((todo for todo in todos if todo['id'] == todo_id), None)
    if todo:
        return jsonify(todo)
    else:
        return jsonify({'error': 'Todo not found'}), 404

# 添加新的待办事项
@app.route('/todos', methods=['POST'])
def add_todo():
    todo = request.json
    todo['id'] = len(todos) + 1
    todos.append(todo)
    return jsonify(todo), 201

# 更新待办事项
@app.route('/todos/<int:todo_id>', methods=['PUT'])
def update_todo(todo_id):
    todo = next((todo for todo in todos if todo['id'] == todo_id), None)
    if not todo:
        return jsonify({'error': 'Todo not found'}), 404
    todo.update(request.json)
    return jsonify(todo)

# 删除待办事项
@app.route('/todos/<int:todo_id>', methods=['DELETE'])
def delete_todo(todo_id):
    global todos
    todos = [todo for todo in todos if todo['id'] != todo_id]
    return '', 204

if __name__ == '__main__':
    app.run(debug=True)

定义了几个路由来执行不同的操作:

  • GET /todos:获取所有待办事项。
  • GET /todos/<todo_id>:获取特定ID的待办事项。
  • POST /todos:添加新的待办事项。
  • PUT /todos/<todo_id>:更新特定ID的待办事项。
  • DELETE /todos/<todo_id>:删除特定ID的待办事项。

可以使用 cURL 或 Postman 等工具来测试这些 API。

curl http://127.0.0.1:5000/todos

或者,使用以下 cURL 命令来添加一个新的待办事项:

curl -X POST -H "Content-Type: application/json" -d '{"title":"学习Flask","completed":false}' http://127.0.0.1:5000/todos


原文地址:https://blog.csdn.net/MayYou_SSS/article/details/138124685

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!