在编程开发中,我们经常会遇到接口状态码这个概念,它通常代表着某个操作的结果或者某个请求的状态。在本文中,我们将从多个方面对接口状态码进行详细的阐述。
一、请求成功
当我们向后端发送请求后,如果请求成功,后端一般会返回状态码200。这里我们使用Python Flask框架来演示一个请求成功的接口:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello World', 200
在这个代码中,我们定义了一个路由为’/’的函数,它返回了一个字符串’Hello World’和状态码为200的响应。这里需要注意的是,Flask框架中的默认状态码就是200,所以我们可以省略掉状态码这个参数。
二、请求失败
1. 参数错误
当我们向后端发送请求时,如果请求参数不合法,后端一般会返回状态码400。常见的参数错误包括参数缺失、参数类型不正确等。下面是一个Python Flask框架中返回400状态码的例子:
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/login', methods=['POST'])
def login():
user = request.json.get('user')
password = request.json.get('password')
if not user or not password:
return jsonify({'error': '用户名或密码不能为空'}), 400
return jsonify({'message': '登录成功'}), 200
在这个例子中,我们定义了一个路由为’/login’的函数,它接收POST请求,并从请求体中获取user和password参数。如果参数缺失,我们就返回一个JSON格式的错误信息和状态码400。
2. 权限错误
当我们向后端发送请求时,如果我们的权限不够,后端一般会返回状态码401。这里我们使用Python Flask框架来演示一个权限错误的接口:
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/secret', methods=['GET'])
def secret():
token = request.headers.get('Authorization')
if token != 'Bearer 123':
return jsonify({'error': '你没有权限访问这个资源'}), 401
return jsonify({'message': '这是一个秘密'}), 200
在这个例子中,我们定义了一个路由为’/secret’的函数,它接收GET请求,并从请求头中获取Authorization参数。如果这个参数的值不是’Bearer 123’,我们就返回一个JSON格式的错误信息和状态码401。
3. 资源不存在
当我们向后端发送请求时,如果请求的资源不存在,后端一般会返回状态码404。下面是一个Python Flask框架中返回404状态码的例子:
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/')
def catch_all(path):
return jsonify({'error': '这个URL不存在'}), 404
在这个例子中,我们定义了一个路由为’/’的函数,它匹配所有的请求,并返回一个JSON格式的错误信息和状态码404。
4. 服务器错误
当我们向后端发送请求时,如果服务器出现了错误,后端一般会返回状态码500。下面是一个Python Flask框架中返回500状态码的例子:
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/error')
def error():
1/0
return jsonify({'message': '这个请求永远不会返回'}), 200
在这个例子中,我们定义了一个路由为’/error’的函数,它返回的响应会导致程序出现除以0的错误,从而导致服务器出现500错误。
三、重定向
当我们向后端发送请求时,如果需要重定向到其他URL,后端一般会返回状态码302。下面是一个Python Flask框架中返回302状态码的例子:
from flask import Flask, redirect
app = Flask(__name__)
@app.route('/old')
def old():
return redirect('/new', code=302)
@app.route('/new')
def new():
return '这是一个新的URL'
在这个例子中,我们定义了两个路由,分别为’/old’和’/new’。当我们向’/old’发送请求时,会重定向到’/new’,并返回状态码302。
四、其他状态码
1. 201 Created
当我们向后端发送POST请求,创建一个新资源成功时,后端一般会返回状态码201。下面是一个Python Flask框架中返回201状态码的例子:
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/user', methods=['POST'])
def user():
name = request.json.get('name')
age = request.json.get('age')
return jsonify({'id': 1, 'name': name, 'age': age}), 201
在这个例子中,我们定义了一个路由为’/user’的函数,它接收POST请求,并从请求体中获取name和age参数。在这个函数中,我们创建了一个新的用户,并返回JSON格式的用户信息和状态码201。
2. 204 No Content
当我们向后端发送PUT或DELETE请求,修改或删除资源成功时,后端一般会返回状态码204。下面是一个Python Flask框架中返回204状态码的例子:
from flask import Flask, request
app = Flask(__name__)
users = [{'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bob'}]
@app.route('/user/', methods=['DELETE'])
def delete_user(user_id):
for user in users:
if user['id'] == user_id:
users.remove(user)
break
return '', 204
在这个例子中,我们定义了一个路由为’/user/’的函数,它接收DELETE请求,并从URL中获取user_id参数。在这个函数中,我们查找指定的用户并删除它,并返回空响应和状态码204。
3. 429 Too Many Requests
当我们向后端发送请求时,如果我们发送的请求数超过了服务器的限制,后端一般会返回状态码429。这个状态码通常被用于防止DDoS攻击等场景。下面是一个Python Flask框架中返回429状态码的例子:
from flask import Flask, jsonify
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address
app = Flask(__name__)
limiter = Limiter(app, key_func=get_remote_address)
@app.route('/foo')
@limiter.limit('10/hour')
def foo():
return jsonify({'message': '这个请求被限制了'}), 200
在这个例子中,我们使用Flask Limiter库来限制’/foo’接口每小时只能接受10个请求,如果超过了限制,就返回JSON格式的错误信息和状态码429。
原创文章,作者:CFTOF,如若转载,请注明出处:https://www.506064.com/n/368668.html
微信扫一扫
支付宝扫一扫