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