国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

探索Flask中的RESTful API設(shè)計(jì)與實(shí)現(xiàn)

這篇具有很好參考價(jià)值的文章主要介紹了探索Flask中的RESTful API設(shè)計(jì)與實(shí)現(xiàn)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Restful API

基礎(chǔ)介紹:

? RESTful API(Representational State Transfer)是一種基于HTTP協(xié)議設(shè)計(jì)的應(yīng)用程序編程接口(API)風(fēng)格,用于在客戶端和服務(wù)器之間進(jìn)行通信。它提供了一組規(guī)范和約束,用于創(chuàng)建可伸縮、可靠和可維護(hù)的網(wǎng)絡(luò)服務(wù)。

  1. 路徑(URI)設(shè)計(jì):

    • 使用有意義的路徑來(lái)表示資源,例如 /users 表示用戶資源。
    • 遵循路徑層次結(jié)構(gòu),使用斜杠 / 分隔不同的資源和子資源,例如 /users/{id}/orders 表示特定用戶的訂單資源。
    • 避免在路徑中使用動(dòng)詞,使用HTTP方法來(lái)表示操作類(lèi)型。
    • url鏈接中,不能有動(dòng)詞,只能有名詞。并且對(duì)于一些名詞,如果出現(xiàn)復(fù)數(shù),那么應(yīng)該在后面加s。
  2. HTTP方法(Verbs):

    • 使用適當(dāng)?shù)腍TTP方法來(lái)表示對(duì)資源的操作:

      • GET:從服務(wù)器上獲取資源。
      • POST:在服務(wù)器上新創(chuàng)建一個(gè)資源。
      • PUT:在服務(wù)器上更新資源。(客戶端提供所有改變后的數(shù)據(jù))
      • PATCH:在服務(wù)器上更新資源。(客戶端只提供需要改變的屬性)
      • DELETE:從服務(wù)器上刪除資源。
    • 合理使用HTTP狀態(tài)碼來(lái)表示請(qǐng)求的結(jié)果:

      • 200 OK 服務(wù)器成功響應(yīng)客戶端的請(qǐng)求。
        400 INVALID REQUEST 用戶發(fā)出的請(qǐng)求有錯(cuò)誤,服務(wù)器沒(méi)有進(jìn)行新建或修改數(shù)據(jù)的操作
        401 Unauthorized 用戶沒(méi)有權(quán)限訪問(wèn)這個(gè)請(qǐng)求
        403 Forbidden 因?yàn)槟承┰蚪乖L問(wèn)這個(gè)請(qǐng)求
        404 NOT FOUND 用戶發(fā)送的請(qǐng)求的url不存在
        406 NOT Acceptable 用戶請(qǐng)求不被服務(wù)器接收(比如服務(wù)器期望客戶端發(fā)送某個(gè)字段,但是沒(méi)有發(fā)送)。
        500 Internal server error 服務(wù)器內(nèi)部錯(cuò)誤,比如出現(xiàn)了bug

3.參數(shù)傳遞

在 RESTful API 中,參數(shù)傳遞可以使用不同的方式,包括查詢參數(shù)(Query Parameters)、路徑參數(shù)(Path Parameters)、請(qǐng)求體(Request Body)和請(qǐng)求頭(Request Headers)。這些不同的方式可以根據(jù)具體的需求和語(yǔ)義選擇使用。

以下是對(duì)每種參數(shù)傳遞方式的簡(jiǎn)要說(shuō)明:

  1. 查詢參數(shù)(Query Parameters):
    • 查詢參數(shù)是附加在URL末尾的鍵值對(duì),以?開(kāi)頭,多個(gè)參數(shù)使用&分隔,例如:/users?name=john&age=25
    • 查詢參數(shù)常用于過(guò)濾、排序、分頁(yè)等操作。
    • 在服務(wù)器端,可以通過(guò)解析URL中的查詢參數(shù)來(lái)獲取傳遞的值。
  2. 路徑參數(shù)(Path Parameters):
    • 路徑參數(shù)是包含在URL路徑中的變量,由花括號(hào){}表示,例如:/users/{id}
    • 路徑參數(shù)用于標(biāo)識(shí)特定的資源,如獲取特定用戶的信息。
    • 在服務(wù)器端,可以通過(guò)解析URL路徑來(lái)提取路徑參數(shù)的值。
  3. 請(qǐng)求體(Request Body):
    • 請(qǐng)求體是在HTTP請(qǐng)求中包含的數(shù)據(jù),通常使用POST、PUT等方法發(fā)送。
    • 請(qǐng)求體可以包含結(jié)構(gòu)化數(shù)據(jù),如JSON、XML等格式,用于傳遞更復(fù)雜的參數(shù)。
    • 在服務(wù)器端,可以通過(guò)解析請(qǐng)求體來(lái)獲取傳遞的值。
  4. 請(qǐng)求頭(Request Headers):
    • 請(qǐng)求頭是包含在HTTP請(qǐng)求頭部中的鍵值對(duì),用于傳遞元數(shù)據(jù)和其他信息。
    • 請(qǐng)求頭可以用于身份驗(yàn)證、內(nèi)容類(lèi)型指定等目的。
    • 在服務(wù)器端,可以通過(guò)解析請(qǐng)求頭來(lái)獲取傳遞的值。

4.錯(cuò)誤處理

  • 使用適當(dāng)?shù)腍TTP狀態(tài)碼來(lái)指示錯(cuò)誤,如400表示請(qǐng)求錯(cuò)誤、401表示未授權(quán)、500表示服務(wù)器內(nèi)部錯(cuò)誤等。
  • 提供有用的錯(cuò)誤信息,幫助客戶端識(shí)別和解決問(wèn)題。

案例:

現(xiàn)在給出代碼,展示Restful APi 在Flask中的使用:

from flask import Flask, url_for, redirect, request

app = Flask(__name__)
app.debug = True

@app.route('/article/<id>/')
def article(id):
    return '%s article detail' % id


@app.route('/login/', methods=['GET', 'POST'])
def login():
    return 'login page'

@app.route('/profile/', methods=['GET', 'POST'])
def profile():
    name = request.args.get('name') # get請(qǐng)求使用request.args獲取參數(shù)

    if not name:
        # 如果沒(méi)有name,說(shuō)明沒(méi)有登錄,進(jìn)行重定向,重定向到路由函數(shù)login
        return redirect(url_for('login'))
    else:
        return "hello " + name


if __name__ == '__main__':
    # host=0.0.0.0可以讓其他電腦也能訪問(wèn)到該網(wǎng)站,port指定訪問(wèn)的端口。默認(rèn)的host是127.0.0.1,port為5000
    app.run(host='0.0.0.0', port=9000)

改進(jìn):

class User(Base):
    # 定義表名為users
    __tablename__ = 'users'

    # 將id設(shè)置為主鍵,并且默認(rèn)是自增長(zhǎng)的
    id = Column(Integer, primary_key=True, autoincrement=True)
    # name字段,字符類(lèi)型,最大的長(zhǎng)度是50個(gè)字符
    name = Column(String(50))
    fullname = Column(String(50))
    password = Column(String(100))

    # 修改內(nèi)置方法
    def __str__(self):
        return "<User(id='%s',name='%s',fullname='%s',password='%s')>" % (
            self.id, self.name, self.fullname, self.password)

    def to_json(self): # 封裝一個(gè)可以轉(zhuǎn)化為json格式的函數(shù)方法
        return {"id": self.id, "name": self.name, "fullname": self.fullname, "password": self.password}


@app.route('/users/<id>/', methods=['GET'])
def users_get_by_id(id):
    result = get_user_by_id(id) 
  	return jsonify(result.to_json())# 這里的result應(yīng)該是python的字典類(lèi)型,最后使用Flask中的jsonify函數(shù)修飾一下
@app.route('/users/', methods=['GET'])
def users_get():
    result = get_user_list()
return jsonify([x.to_json() for x in result]) # 使用列表生成式,對(duì)列表中的每一個(gè)元素都是用 to_json()

def get_user_by_id(user_id):
    Session = sessionmaker(bind=engine)
    session = Session()
    return session.query(User).filter(User.id == user_id).all()[0]# 返回一個(gè)對(duì)象

def get_user_list():
    Session = sessionmaker(bind=engine)
    session = Session()

    return session.query(User).order_by(User.id).all()

這樣改進(jìn)后,我們發(fā)現(xiàn)每一個(gè)路由函數(shù)的返回結(jié)果都是一個(gè)json對(duì)象,這樣也可以作為Ajax請(qǐng)求的地址來(lái)實(shí)現(xiàn)動(dòng)態(tài)加載數(shù)據(jù)了。

增刪改查:

增加:
def put_user(name, fullname, password):
    Session = sessionmaker(bind=engine) # 導(dǎo)入引擎
    session = Session() # 實(shí)例化一個(gè)session對(duì)象 
    add_user = User(name=name, fullname=fullname, password=password)
    session.add(add_user)
    session.commit()
    return "ok"

結(jié)合一下:

@app.route('/users/' methods=['PUT·]]
def users_put():
    name = request.args.get('name′)
    fullname = request.args.get('fullname')	
    password = request.args.get('password')
    try:
    	result = put_user(name, fullname, password)
    	if result == "ok":
    	return jsonify({
            "status": "successful", "content":"add user Successful" ,"function":"put_user"
        }),208
    except Exception as e:
    	return jsonify({"status": "fail","content":e}),500
    return 'users page'
修改:
def update_user_by_id(id, name, fullname,password):
	Session = sessionmaker(bind=engine)
	session = Session()
	result =θ
	if name:
		result = session.query(User).filter(User.id == id).update({"name": name})
	if fullname:
		result = session.query(User).filter(User.id == id).update({"fullname": fullname})
    if password:
		result  = session.query(User) .filter(User.id == id).update({"password": password})
	session.commit()
	session.close()
	return result

在上面的操作中,如果更新成功,result會(huì)被置為1.

@app.route(/users/<id>/*, methods=['PATCH'])
def users_patch(id):
    fullname = request.args.get('fullname')
    name = request.args.get('name*)
    password = request.args.get('password')
    result = update_user_by_id(id, name, fullname, password)
    if result == 1:
    	return jsonify(
    {"status": "successful", "content":"update user successful", "function": "update_user_by_id"}), 200
    if result == θ:
    	return jsonify(
    {"status": "fail", "content": "Failed to update user data", "function": "update_user_by_id"}), 408
    except Exception as e:
    	return jsonify(f"status": "fail", "Error Name": e.--class-- "content": eb), 500
刪除:
def delete_user_by_id(user_id):
    Session = sessionmaker(bind=engine)
    session = Session()
    session.query(User).filter(User.id == user_id).delete()
    session.commit()
    session.close()
	return "ok"
@app.route('/users/<id>/" methods=['DELETE'])
def users_delete_by_id(id):
    try:
    result = delete_user_by_id(id)
    if result == "ok":
    return jsonify({"status": "successful", "content": "delete user successful", "function": "put_user"}), 200
    except Exception as e:
    return jsonify({"status": "fail","content": e}),500

總結(jié):

? 在本篇博客中,我們深入探索了RESTful API的基礎(chǔ)知識(shí),并了解了如何在Flask框架中使用它來(lái)構(gòu)建強(qiáng)大的API。我們學(xué)習(xí)了RESTful原則、路徑設(shè)計(jì)、HTTP方法、參數(shù)傳遞等關(guān)鍵概念,并通過(guò)示例代碼演示了它們的實(shí)際應(yīng)用。

? 通過(guò)使用Flask框架,我們可以輕松地創(chuàng)建和管理RESTful API,從而使我們的應(yīng)用程序更加靈活、可擴(kuò)展和易于維護(hù)。Flask提供了強(qiáng)大的路由和視圖函數(shù)機(jī)制,使我們能夠以簡(jiǎn)潔的方式定義API的端點(diǎn)和動(dòng)作。

? 同時(shí),我們還探討了RESTful API的設(shè)計(jì)原則,如良好的路徑命名、合適的HTTP狀態(tài)碼和錯(cuò)誤處理等,這些原則幫助我們?cè)O(shè)計(jì)出易于理解和使用的API接口,提供良好的開(kāi)發(fā)者體驗(yàn)。

? 通過(guò)學(xué)習(xí)和實(shí)踐RESTful API的基礎(chǔ)知識(shí),我們可以構(gòu)建出符合標(biāo)準(zhǔn)的API,并為前端開(kāi)發(fā)人員、移動(dòng)應(yīng)用程序開(kāi)發(fā)人員和其他客戶端提供一致、可靠的接口。這不僅有助于提高開(kāi)發(fā)效率,還能促進(jìn)團(tuán)隊(duì)間的協(xié)作和集成,為構(gòu)建現(xiàn)代化、高性能的應(yīng)用奠定堅(jiān)實(shí)基礎(chǔ)。

? 無(wú)論是構(gòu)建簡(jiǎn)單的API還是復(fù)雜的分布式系統(tǒng),掌握RESTful API的基礎(chǔ)知識(shí)都是非常重要的。希望本篇博客對(duì)您在理解和應(yīng)用RESTful API方面起到了指導(dǎo)作用,并能為您的API開(kāi)發(fā)之旅提供一些有價(jià)值的見(jiàn)解。

? 祝您在使用Flask和構(gòu)建RESTful API的過(guò)程中取得巨大成功!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-812081.html

到了這里,關(guān)于探索Flask中的RESTful API設(shè)計(jì)與實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 使用 Python 和 Flask 構(gòu)建簡(jiǎn)單的 Restful API 第 1 部分

    使用 Python 和 Flask 構(gòu)建簡(jiǎn)單的 Restful API 第 1 部分

    ????????我將把這個(gè)系列分成 3 或 4 篇文章。在本系列的最后,您將了解使用flask構(gòu)建 restful API 是多么容易。在本文中,我們將設(shè)置環(huán)境并創(chuàng)建將顯示“Hello World”的終結(jié)點(diǎn)。 ????????我假設(shè)你的電腦上安裝了python 2.7和pip。我已經(jīng)在python 2.7上測(cè)試了本文中介紹的代碼,

    2024年02月13日
    瀏覽(23)
  • flask-restful 和 blueprint

    flask-restful 使用 flask-restful第三方庫(kù) from flask_restful import Resource, Api app = Flask(__name__) api = Api(app) class HelloWorldResource(Resource): ? ? def get(self): ? ? ? ? ? ?return {\\\'hello\\\':\\\'world\\\'} ? ? def post(self): ? ? ? ? ? ?return {\\\'msg\\\':‘post hello wolrd’} api.add_resource(HelloworldResource,\\\'/\\\') 方式完成restf

    2023年04月23日
    瀏覽(15)
  • flask restful項(xiàng)目開(kāi)發(fā)結(jié)尾必看!!!

    ?為了實(shí)現(xiàn)restful風(fēng)格的一些增刪查改需要安裝的第三方庫(kù)太繁雜了所以: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 建議放棄flask框架 這個(gè)框架自帶的功能太少了,實(shí)現(xiàn)一些簡(jiǎn)單的功能都要自主安裝很多第三方庫(kù),而且不同版本的第三方庫(kù)還有兼容問(wèn)題?嘖嘖嘖! 后續(xù)也不在

    2024年02月06日
    瀏覽(21)
  • Python flask-restful 框架講解

    Django 和 Flask 一直都是 Python 開(kāi)發(fā) Web 的首選,而 Flask 的微內(nèi)核更適用于現(xiàn)在的云原生微服務(wù)框架。但是 Flask 只是一個(gè)微型的 Web 引擎,所以我們需要擴(kuò)展 Flask 使其發(fā)揮出更強(qiáng)悍的功能。 python flask框架詳解:https://blog.csdn.net/shifengboy/article/details/114274271 Flask-RESTful Flask-RESTful 就

    2024年02月13日
    瀏覽(20)
  • 使用Flask-Restful后handle_error干擾無(wú)法正常捕獲全局異常的解決

    使用Flask-Restful后handle_error干擾無(wú)法正常捕獲全局異常的解決

    1、發(fā)現(xiàn)問(wèn)題 1.1、追蹤Api源碼,vscode舉例,右鍵點(diǎn)擊Api,選擇轉(zhuǎn)到定義,確定flask_restful包的位置 1.2、vscode 打開(kāi)flask_restful包作為一個(gè)項(xiàng)目 1.3、之前的問(wèn)題是,拋出的HTTPException,會(huì)變成這個(gè)形狀: 所以全局搜索message 很明顯就是這里,點(diǎn)進(jìn)去 1.4、打印一下 1.5、簡(jiǎn)單調(diào)試一下,

    2024年02月09日
    瀏覽(18)
  • 探索開(kāi)源創(chuàng)新:Gorb - Go語(yǔ)言構(gòu)建的高效RESTful API框架

    項(xiàng)目地址:https://gitcode.com/kobolog/gorb Gorb 是一個(gè)為Go語(yǔ)言開(kāi)發(fā)者設(shè)計(jì)的輕量級(jí)、高性能的RESTful API框架。它旨在簡(jiǎn)化API開(kāi)發(fā)流程,提高代碼可讀性和可維護(hù)性,同時(shí)也提供了一套強(qiáng)大的工具來(lái)幫助開(kāi)發(fā)者創(chuàng)建健壯的Web服務(wù)。 Gorb的核心特性包括: 路由控制 :Gorb使用了直觀且靈活

    2024年04月25日
    瀏覽(27)
  • RESTful API 設(shè)計(jì)指南

    RESTful API?是目前比較成熟的一套互聯(lián)網(wǎng)應(yīng)用程序的API設(shè)計(jì)理論 API與用戶的通信協(xié)議,總是使用HTTPs協(xié)議。 應(yīng)用層協(xié)議 應(yīng)該盡量將API部署在專(zhuān)用域名之下。并SSL 加密 應(yīng)該將API的版本號(hào)放入U(xiǎn)RL。 ?另一種做法是,將版本號(hào)放在HTTP頭信息中,但不如放入U(xiǎn)RL方便和直觀。Github采用

    2024年02月07日
    瀏覽(23)
  • RESTful API 中的 HTTP 方法有哪些?

    RESTful API 中的 HTTP 方法有哪些?

    RESTful API 是一種基于 HTTP 協(xié)議的 API 設(shè)計(jì)風(fēng)格,它使用 HTTP 協(xié)議中的方法來(lái)定義對(duì)資源的操作。在 RESTful API 中,HTTP 方法主要用于表示對(duì)資源的操作,例如獲取、創(chuàng)建、更新和刪除資源。本文將介紹 RESTful API 中常用的 HTTP 方法以及它們的用途。 HTTP 方法是 HTTP 協(xié)議中定義的一

    2024年02月10日
    瀏覽(20)
  • 【最佳實(shí)踐】如何設(shè)計(jì) RESTful API ?

    良好的 API 設(shè)計(jì)是一個(gè)經(jīng)常被提及的話題,特別是對(duì)于那些試圖完善其 API 策略的團(tuán)隊(duì)來(lái)說(shuō)。一個(gè)設(shè)計(jì)良好的 API 的好處包括:改進(jìn)開(kāi)發(fā)者體驗(yàn)、更快速地編寫(xiě)文檔以及更高效地推廣你的 API。但是,到底什么才構(gòu)成了良好 API 設(shè)計(jì)呢?在這篇博客文章中,我將詳細(xì)介紹幾個(gè)為

    2024年02月07日
    瀏覽(24)
  • 如何使用Python Flask和MySQL創(chuàng)建管理用戶的REST API

    如何使用Python Flask和MySQL創(chuàng)建管理用戶的REST API

    部分?jǐn)?shù)據(jù)來(lái)源: ChatGPT? 引言 ????????在現(xiàn)代化的應(yīng)用開(kāi)發(fā)中,數(shù)據(jù)庫(kù)是一個(gè)非常重要的組成部分。關(guān)系型數(shù)據(jù)庫(kù)(例如:MySQL、PostgreSQL)在這方面尤其是很流行。Flask是一個(gè)Python的web框架,非常適合實(shí)現(xiàn)REST API。在這篇文章中,我們將介紹如何使用Python Flask和MySQL創(chuàng)建一個(gè)

    2024年02月08日
    瀏覽(28)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包