[Django REST FrameWork][7]:模式和客戶端庫(kù)

模式是一種機(jī)器可讀文檔,用于描述可用的API端點(diǎn),其URLS以及它們支持的操作。

模式可以是自動(dòng)生成的文檔的有用工具,也可以用于驅(qū)動(dòng)可以與API進(jìn)行交互的動(dòng)態(tài)客戶端庫(kù)。

核心API

為了提供模式支持REST框架使用Core API

Core API是用于描述API的文檔規(guī)范。它用于提供可用端點(diǎn)的內(nèi)部表示格式以及API暴露的可能交互。它可以用于服務(wù)器端或客戶端。

當(dāng)使用服務(wù)器端時(shí),Core API允許API支持各種模式或超媒體格式的渲染。

當(dāng)客戶端使用時(shí),Core API允許動(dòng)態(tài)驅(qū)動(dòng)的客戶端庫(kù)可以與暴露支持的模式或超媒體格式的任何API進(jìn)行交互。

添加模式

REST框架支持明確定義的模式視圖或自動(dòng)生成的模式。由于我們使用的是視圖和路由器,我們可以簡(jiǎn)單地使用自動(dòng)模式生成。

您需要安裝coreapipython包才能包含API模式。

$?pip?install?coreapi

現(xiàn)在我們可以通過(guò)在URL配置中包含一個(gè)自動(dòng)生成的模式視圖來(lái)為API添加模式。

from?rest_framework.schemas?import?get_schema_view

schema_view?=?get_schema_view(title='Pastebin?API')

urlpatterns?=?[

????url(r'^schema/$',?schema_view),

????...

]

如果您在瀏覽器中訪問(wèn)API根端點(diǎn),則現(xiàn)在應(yīng)該可以看到corejson?表示形式作為選項(xiàng)可用。

我們還可以通過(guò)在Accept標(biāo)題中指定所需的內(nèi)容類型從命令行請(qǐng)求模式。

$?http?http://127.0.0.1:8000/schema/?Accept:application/coreapi+json

HTTP/1.0?200?OK

Allow:?GET,?HEAD,?OPTIONS

Content-Type:?application/coreapi+json

{

????"_meta":?{

????????"title":?"Pastebin?API"

????},

????"_type":?"document",

????...

默認(rèn)輸出樣式是使用Core JSON編碼。

還支持其他架構(gòu)格式,如Open API(以前稱為Swagger)。

使用命令行客戶端

現(xiàn)在我們的API暴露了架構(gòu)端點(diǎn),我們可以使用動(dòng)態(tài)客戶端庫(kù)來(lái)與API進(jìn)行交互。為了證明這一點(diǎn),我們來(lái)使用Core API命令行客戶端。

命令行客戶端可用作coreapi-cli包:

$?pip?install?coreapi-cli

現(xiàn)在檢查它在命令行上可用...

$?coreapi

Usage:?coreapi?[OPTIONS]?COMMAND?[ARGS]...

??Command?line?client?for?interacting?with?CoreAPI?services.

??Visit?http://www.coreapi.org?for?more?information.

Options:

??--version??Display?the?package?version?number.

??--help?????Show?this?message?and?exit.

Commands:

...

首先,我們將使用命令行客戶機(jī)加載API模式。

$?coreapi?get?http://127.0.0.1:8000/schema/

????snippets:?{

????????highlight(id)

????????list()

????????read(id)

????}

????users:?{

????????list()

????????read(id)

????}

我們還沒(méi)有認(rèn)證,所以現(xiàn)在我們只能看到只讀端點(diǎn),這與我們?nèi)绾卧O(shè)置API的權(quán)限一致。

我們嘗試列出現(xiàn)有的片段,使用命令行客戶端:

$?coreapi?action?snippets?list

[

????{

????????"url":?"http://127.0.0.1:8000/snippets/1/",

????????"id":?1,

????????"highlight":?"http://127.0.0.1:8000/snippets/1/highlight/",

????????"owner":?"lucy",

????????"title":?"Example",

????????"code":?"print('hello,?world!')",

????????"linenos":?true,

????????"language":?"python",

????????"style":?"friendly"

????},

????...

一些API端點(diǎn)需要命名參數(shù)。例如,要獲取特定代碼段的高亮度HTML,我們需要提供一個(gè)id。

$?coreapi?action?snippets?highlight?--param?id=1

??Example

??...

認(rèn)證我們的客戶

如果我們想要?jiǎng)?chuàng)建,編輯和刪除片段,我們需要作為有效用戶進(jìn)行身份驗(yàn)證。在這種情況下,我們只需使用基本的auth。

確保更換,并與您的實(shí)際用戶名和密碼下面。

$?coreapi?credentials?add?127.0.0.1?:?--auth?basic

Added?credentials

127.0.0.1?"Basic?<...>"

現(xiàn)在,如果我們?cè)俅潍@取架構(gòu),我們應(yīng)該能夠看到一整套可用的交互。

$?coreapi?reload

Pastebin?API?"http://127.0.0.1:8000/schema/">

????snippets:?{

????????create(code,?[title],?[linenos],?[language],?[style])

????????delete(id)

????????highlight(id)

????????list()

????????partial_update(id,?[title],?[code],?[linenos],?[language],?[style])

????????read(id)

????????update(id,?code,?[title],?[linenos],?[language],?[style])

????}

????users:?{

????????list()

????????read(id)

????}

我們現(xiàn)在可以與這些端點(diǎn)進(jìn)行交互。例如,要?jiǎng)?chuàng)建新的代碼段:

$?coreapi?action?snippets?create?--param?title="Example"?--param?code="print('hello,?world')"

{

????"url":?"http://127.0.0.1:8000/snippets/7/",

????"id":?7,

????"highlight":?"http://127.0.0.1:8000/snippets/7/highlight/",

????"owner":?"lucy",

????"title":?"Example",

????"code":?"print('hello,?world')",

????"linenos":?false,

????"language":?"python",

????"style":?"friendly"

}

并刪除片段:

$?coreapi?action?snippets?delete?--param?id=7

除了命令行客戶端,開發(fā)人員還可以使用客戶端庫(kù)與您的API進(jìn)行交互。Python客戶端庫(kù)是第一個(gè)可用的,并且計(jì)劃很快發(fā)布一個(gè)Javascript客戶端庫(kù)。

有關(guān)定制模式生成和使用Core API客戶端庫(kù)的更多詳細(xì)信息,您需要參考完整的文檔。

回顧我們的工作

我們擁有非常少量的代碼,現(xiàn)在擁有一個(gè)完整的可以瀏覽網(wǎng)頁(yè)的完整的pastebin Web API,它包含一個(gè)模式驅(qū)動(dòng)的客戶端庫(kù),并且具有身份驗(yàn)證,每個(gè)對(duì)象權(quán)限和多個(gè)渲染器格式。

我們已經(jīng)走過(guò)了設(shè)計(jì)過(guò)程的每一步,并且看到了如何自定義任何我們可以逐漸工作的方式來(lái)簡(jiǎn)單地使用常規(guī)的Django視圖。

您可以查看GitHub上的最終教程代碼,或者嘗試沙盒中的實(shí)例。

向上和向上

我們已經(jīng)完成了我們的教程。如果您想要更多地參與到REST框架項(xiàng)目中,以下是您可以開始的幾個(gè)地方:

通過(guò)審查和提交問(wèn)題,提出請(qǐng)求,為GitHub做出貢獻(xiàn)。

加入REST框架討論組,并幫助構(gòu)建社區(qū)。

跟隨Twitter上的作者,并說(shuō)你好。

現(xiàn)在去構(gòu)建真棒的東西。

Django REST FrameWork中文文檔目錄:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容