目录
[2.5RESTful API例子](#2.5RESTful API例子)
[三、RESTful API](#三、RESTful API)
[3.1什么是RESTful API](#3.1什么是RESTful API)
[3.2RESTful API中的关键概念](#3.2RESTful API中的关键概念)
一、HTTP状态码
1XX信息性状态码
- 100 Continue:客户端应继续其请求。服务器仅接收到部分请求,但是希望客户端继续发送其余部分。
2XX成功状态码
- 200 OK:请求成功,服务器已成功处理了请求,通常会在响应体中返回请求的资源
- 201 Created:请求成功并且服务器创建了新的资源,通常在创建新对象或记录时返回
- 204: No Content:请求成功,但服务器没有返回任何内容,常用于只需要执行服务器端操作不需要返回数据的情况
3XX重定向状态码
- 301 Moved Permanently:请求的资源已被永久移动到的新的URL,浏览器应自动重定向到新的URL
- 302 Found:请求的资源临时移动到新的URL,浏览器应临时重定向到新的URL
- 304 Not Modified:客户端发送了附带条件的请求,服务器发现资源未被修改,因此返回此状态码,让客户端使用缓存的资源
4XX客户端错误状态码
- 400 Bad Request:客户端发送的请求有语法错误,服务器无法理解
- 401 Unauthorized:客户端需要进行身份验证才能访问资源,通常在未提供有效的身份凭证或凭证无效时返回
- 403 Forbidden:服务器理解请求,但拒绝执行该请求,客户端没有足够的权限访问资源
- 404 Not Found:服务器无法找到请求的资源,通常是因为URL输入错误或资源已被删除
5XX服务器错误状态码
- 500 Internal Server Error:服务器内部发送错误
- 502 Bad Gateway:服务器作为网关或代理,从上游服务器收到了无效的响应
- 503 Service Unavailable:服务器暂时无法处理请求,通常由于服务器过载或正在维护
二、GET/POST/PUT/DELETE请求
2.1GET
GET请求向指定资源发出请求,请求中包含了资源的URL和请求参数。
使用GET 请求方式提交的数据会被包含在URL中,因此易于被缓存和浏览器保存,也因此不适合用于提交敏感数据
由于GET 通过URL 提交数据,那么GET 可以提交的数据量与URL长度 有直接关系。实际上,URL 不存在参数上限的问题,HTTP协议规范没有对URL 长度进行限制,对URL有限制的是不同的浏览器。因此GET可以提交的数据量取决于浏览器对URL长度的限制
2.2POST
POST 请求提交的方式会被包含在请求体中,而不像GET 请求方式那样包含在URL 中,因此POST请求可以提交比GET更大的数据量
理论上讲,POST是没有大小限制的。
对POST 起限制作用的是服务器的处理程序的处理能力,如果服务器可以处理100MB的数据量,俺么这个POST 请求包体的大小就是100MB
2.3PUT
PUT请求用于向服务器更新指定资源,可以理解为对服务器上的资源进行修改操作
2.4DELETE
DELETE请求用于请求服务器删除指定的资源,可以理解为对服务器上的资源进行删除操作
2.5RESTful API例子
下面是一个Flask 搭建的一组GET/POST/PUT/DELETE 请求的RESTful API例子
python
from flask import Flask, jsonify, request
app = Flask(__name__)
# 模拟的书籍列表
books = [
{
'id': 1,
'title': 'Python Crash Course',
'author': 'Eric Matthes'
},
{
'id': 2,
'title': 'Clean Code',
'author': 'Robert C. Martin'
}
]
# 获取所有书籍
@app.route('/books', methods=['GET'])
def get_books():
response = {
"status": 200,
"data": books
}
return jsonify(response), 200
# 根据 ID 获取单本书籍
@app.route('/books/<int:book_id>', methods=['GET'])
def get_book(book_id):
book = next((book for book in books if book['id'] == book_id), None)
if book:
response = {
"status": 200,
"data": book
}
return jsonify(response), 200
response = {
"status": 404,
"message": "Book not found"
}
return jsonify(response), 404
# 添加一本新书
@app.route('/books', methods=['POST'])
def add_book():
new_book = request.get_json()
if not new_book or 'title' not in new_book or 'author' not in new_book:
response = {
"status": 400,
"message": "Invalid book data"
}
return jsonify(response), 400
new_book['id'] = max([book['id'] for book in books]) + 1 if books else 1
books.append(new_book)
response = {
"status": 201,
"data": new_book
}
return jsonify(response), 201
# 根据 ID 更新书籍信息
@app.route('/books/<int:book_id>', methods=['PUT'])
def update_book(book_id):
book = next((book for book in books if book['id'] == book_id), None)
if not book:
response = {
"status": 404,
"message": "Book not found"
}
return jsonify(response), 404
updated_data = request.get_json()
if not updated_data:
response = {
"status": 400,
"message": "Invalid update data"
}
return jsonify(response), 400
book.update(updated_data)
response = {
"status": 200,
"data": book
}
return jsonify(response), 200
# 根据 ID 删除书籍
@app.route('/books/<int:book_id>', methods=['DELETE'])
def delete_book(book_id):
global books
books = [book for book in books if book['id'] != book_id]
response = {
"status": 200,
"message": "Book deleted successfully"
}
return jsonify(response), 200
if __name__ == '__main__':
app.run(debug=True)
三、RESTful API
3.1什么是RESTful API
首先,RESTful API 并不是一种约束 ,仅仅是一种风格,它基于HTTP协议,利用HTTP的各种方法和URL 来实现资源的创建、读取、更新、删除等操作
简单来说:
- GET(SELECT):GET请求被用于获取资源,相当于数据库的SELECT
- POST(INSERT):POST请求用于增加资源,相当于数据库的INSERT
- PUT(UPDATE):PUT请求用于修改资源,相当于数据库的UPDATE
- DELETE(DELETE):DELETE请求用于删除资源,相当于数据库的DELETE

3.2RESTful API中的关键概念
- 资源(Resource):在RESTful API中,任何可以被唯一标识的事物都可以被视为资源,如用户、文章等。每一个资源都有一个唯一的URL作为标识符
- **表述(Representation):**资源在客户端和服务器之间传递的形式(JSON)
- 状态转移(State Transfer):客户端通过HTTP方法对服务器上的资源进行操作