在編程開發中,我們經常會遇到接口狀態碼這個概念,它通常代表着某個操作的結果或者某個請求的狀態。在本文中,我們將從多個方面對接口狀態碼進行詳細的闡述。
一、請求成功
當我們向後端發送請求後,如果請求成功,後端一般會返回狀態碼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/zh-hk/n/368668.html