您的位置:

接口状态码详解

在编程开发中,我们经常会遇到接口状态码这个概念,它通常代表着某个操作的结果或者某个请求的状态。在本文中,我们将从多个方面对接口状态码进行详细的阐述。

一、请求成功

当我们向后端发送请求后,如果请求成功,后端一般会返回状态码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。