Django之 RESTful規范

RESTful 規范

一、什么是RESTful

  • REST與技術無關,代表的是一種軟件架構風格,REST是Representational State Transfer的簡稱,中文翻譯為“表征狀態轉移”
  • REST從資源的角度類審視整個網絡,它將分布在網絡中某個節點的資源通過URL進行標識,客戶端應用通過URL來獲取資源的表征,獲得這些表征致使這些應用轉變狀態
  • REST與技術無關,代表的是一種軟件架構風格,REST是Representational State Transfer的簡稱,中文翻譯為“表征狀態轉移”
  • 所有的數據,不過是通過網絡獲取的還是操作(增刪改查)的數據,都是資源,將一切數據視為資源是REST區別與其他架構風格的最本質屬性
  • 對于REST這種面向資源的架構風格,有人提出一種全新的結構理念,即:面向資源架構(ROA:Resource Oriented Architecture)

二、RESTful API設計

  • API與用戶通信協議,總是使用

  • 域名: 盡量將API部署在專用域名(會存在跨域問題)(https://api.example.com )或(https://example.org/api/ )

  • 路徑,視網絡上任何東西都是資源,均使用名詞表示(可以是復數)

    https://api.example.com/v1/zoos
    https://api.example.com/v1/animals
    https://api.example.com/v1/employees
  • method

    GET      :從服務器取出資源(一項或多項)
    POST     :在服務器新建一個資源
    PUT      :在服務器更新資源(客戶端提供改變后的完整資源)
    PATCH    :在服務器更新資源(客戶端提供改變的屬性)
    DELETE   :從服務器刪除資源
  • 過濾,通過在url上上傳參的形式傳遞搜索條件

    https://api.example.com/v1/zoos?limit=10:指定返回記錄的數量
    https://api.example.com/v1/zoos?offset=10:指定返回記錄的開始位置
    https://api.example.com/v1/zoos?page=2&per_page=100:指定第幾頁,以及每頁的記錄數
    https://api.example.com/v1/zoos?sortby=name&order=asc:指定返回結果按照哪個屬性排序,以及排序順序
    https://api.example.com/v1/zoos?animal_type_id=1:指定篩選條件
  • 狀態碼

    200 OK - [GET]:服務器成功返回用戶請求的數據,該操作是冪等的(Idempotent)。
    201 CREATED - [POST/PUT/PATCH]:用戶新建或修改數據成功。
    202 Accepted - [*]:表示一個請求已經進入后臺排隊(異步任務)
    204 NO CONTENT - [DELETE]:用戶刪除數據成功。
    400 INVALID REQUEST - [POST/PUT/PATCH]:用戶發出的請求有錯誤,服務器沒有進行新建或修改數據的操作,該操作是冪等的。
    401 Unauthorized - [*]:表示用戶沒有權限(令牌、用戶名、密碼錯誤)。
    403 Forbidden - [*] 表示用戶得到授權(與401錯誤相對),但是訪問是被禁止的。
    404 NOT FOUND - [*]:用戶發出的請求針對的是不存在的記錄,服務器沒有進行操作,該操作是冪等的。
    406 Not Acceptable - [GET]:用戶請求的格式不可得(比如用戶請求JSON格式,但是只有XML格式)。
    410 Gone -[GET]:用戶請求的資源被永久刪除,且不會再得到的。
    422 Unprocesable entity - [POST/PUT/PATCH] 當創建一個對象時,發生一個驗證錯誤。
    500 INTERNAL SERVER ERROR - [*]:服務器發生錯誤,用戶將無法判斷發出的請求是否成功。更多看這里:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
    
  • 錯誤處理,應該返回錯誤信息, error 當做key

    {error: "Invalid API key"
    }
  • 返回 結果,針對不同操作,服務器向用戶返回的給過應該符合以下規范

    GET /collection:返回資源對象的列表(數組)
    GET /collection/resource:返回單個資源對象
    POST /collection:返回新生成的資源對象
    PUT /collection/resource:返回完整的資源對象
    PATCH /collection/resource:返回完整的資源對象
    DELETE /collection/resource:返回一個空文檔
  • Hypermedia API,RESTful API 最好做到 Hypermedia, 即返回結果中提供鏈接,連向其他API方法,使得用戶不查文檔,也知道下一步該怎么做。

    {"link": {"rel":   "collection https://www.example.com/zoos","href":  "https://api.example.com/zoos","title": "List of zoos","type":  "application/vnd.yourformat+json"
    }}

 摘自:http://www.ruanyifeng.com/blog/2014/05/restful_api.html

三、基于django 實現

# 路由系統
urlpatterns = [url(r'^users/$', views.Users.as_view()),url(r'^users2/$', views.user2),
]
# 視圖函數
import jsondef  user2(request):if request.method=='GET':dic = {'status':200,'name': 'lqz2', 'age': 18}return HttpResponse(json.dumps(dic))elif request.method=='POST':dic = {'status': 200, 'msg': '修改成功'}return JsonResponse(dic)class Users(View):def get(self, request):dic = {'status':200,'name': 'lqz', 'age': 18}return HttpResponse(json.dumps(dic))def post(self, request):dic = {'status': 200, 'msg': '修改成功'}return JsonResponse(dic)

轉載于:https://www.cnblogs.com/qianzhengkai/p/11115955.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/277423.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/277423.shtml
英文地址,請注明出處:http://en.pswp.cn/news/277423.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

php編譯 ftp,無需重新編譯php加入ftp擴展的解決方法

首先,進入源碼目錄cd php-5.2.13/ext/ftp#運行phpize生成configure/usr/local/php/bin/phpize#編譯,指定php-config,注意這里的php-config,不是php.ini./configure --with-php-config/usr/local/php/bin/php-config#上面可以添加--enable-ftp,也可以不用添加#編譯安…

git常用命令及分支簡介

2019獨角獸企業重金招聘Python工程師標準>>> 1、git基本命令 1)git add 將想要快照的內容寫入緩存區 2)git status -s "AM" 狀態的意思是,這個文件在我們將它添加到緩存之后又有改動 3)git commit -m 第一次…

企業私有云部署im,視頻服務

1,安全問題 2,員工跨地域 3,內部視頻培訓 考勤申請,設備借用申請 名片申請 會議室預訂 審批 內網,局域網部署 Android源碼 https://github.com/starrtc/android-demo ios源碼https://github.com/starrtc/ios-demo

php html 偽靜態,php 偽靜態(url重寫)的寫法

來看下面這個網頁 url:http://www.jbxue.com/test.php/1,100,8630.html其實處理的腳本是test.php 參數為1,100,8630相當于test.php?a1&b1100&c8630 只不過這樣的URL太難記。搜索引擎也不喜歡。真靜態只是完全生成了HTML。客戶端訪問的時候直接輸出。不用腳…

客服工作臺

public Page<Record> customerDeskList(QhyfController controller) throws Exception {//獲取分頁信息PageInfo pageInfo controller.getPageInfo();int pageNumber pageInfo.getPageIndex();int pageSize pageInfo.getPageSize();List<String> paras new Arr…

Leetcode怎么調試java代碼,在Clion上調試LeetCode代碼

在Clion上調試LeetCode代碼在leetcode上做題調試起來總有些不方便&#xff0c;所以查閱了一些資料后&#xff0c;按以下配置&#xff0c;自我感覺效率還行&#xff0c;分享給大家。祝大家刷題愉快。并附上自己整理的leetcode400題題表。Leetcode400題&#xff1a;notion地址依賴…

來入門一下kotlin吧

Kotlin是什么&#xff1f; Kotlin是一種在java虛擬機上運行的靜態類型的編程語言&#xff0c;被稱之為 Android 世界的Swift&#xff0c;由 JetBrains 設計開發并開源。 Kotlin的優勢&#xff01; Kotlin可以編譯成java字節碼&#xff0c;也可以編譯成JavaScript。方便在沒有ja…

apache2 配置php,Windows配置PHP5與Apache2

windows下安裝和配置PHP5與Apache2真是比linux下難多了&#xff0c;唉。這里用的是PHP Version 5.2.1和Apache HTTP Server 2.2.4&#xff0c;都是從官方網站下的。1. 下載安裝&#xff0c;不多說了&#xff0c;apache一路按下去就ok&#xff0c;php連按都不用&#xff0c;解壓…

ReactNative 觸摸事件處理

ReactNative觸摸事件處理 對RN觸摸事件的捕獲與冒泡機制的理解 組件A、B、C結構 組件A組件B組件C 捕獲、冒泡機制 sequenceDiagram A->>A: 是否捕獲&#xff1f;若是則停止向下一級傳遞 A->>B: B->>B: 是否捕獲&#xff1f;若是則停止向下一級傳遞 B->&g…

CISCO網絡故障排錯命令總結分享

一、故障處理命令 1、show命令&#xff1a; 1&#xff09; 全局命令&#xff1a; show version &#xff1b;顯示系統硬件和軟件版本、DRAM、Flash show startup-config &#xff1b;顯示寫入NVRAM中的配置內容 show running-config &#xff1b;顯示當前運行的配置內容 show b…

java input回車,用java怎樣編寫加減乘除,從鍵盤輸入,例如:1+2按回車得到

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓import org.junit.Test;import java.util.regex.Matcher;import java.util.regex.Pattern;public class TestCalc {Testpublic void testCalculator() {String input "11";//輸入String rule "(\\d\\.?\\d*)([\\…

Java中數組在內存中的存放原理?

版權聲明&#xff1a;本文為博主原創文章&#xff0c;未經博主允許不得轉載。 https://blog.csdn.net/yangyong0717/article/details/79165685Java中數組被實現為對象&#xff0c;它們一般都會因為記錄長度而需要額外的內存。對于一個原始數據類型的數組&#xff0c;一般需要24…

程序員如何面試才能拿到offer

一、概述 面試&#xff0c;難還是不難&#xff1f;取決于面試者的底蘊&#xff08;氣場技能&#xff09;、心態和認知及溝通技巧。面試其實可以理解為一場聊天和談判&#xff0c;在這過程中有心理、思想上的碰撞和博弈。其實你只需要搞清楚一個邏輯&#xff1a;“面試官為什么會…

php 跨區域,如何構造PHP的內容包括在非安全(http://)和安全(https://)區域以及跨多個目錄使用?...

只需使用//example.com/foo.blah即可.< img id “sample-image”src “// /media/sample-image.png”/>很明顯,HTTP是協議,但存在其他協議,如GOPHER,HTTPS,FTP等……而不是在gopher URL gopher&#xff1a;//example.com上,您只需鏈接到//example.com,協議就可以在沒有它…

Generative Adversarial Learning Towards Fast Weakly Supervised Detection(CVPR2018)閱讀筆記

弱監督目標檢測相對于一般的目標檢測任務來說&#xff0c;訓練樣本不需要實例級別的標注&#xff0c;只需要圖片級別的標注&#xff0c;即告訴圖片中有什么而不需標注位置信息&#xff0c;這種標注圖片容易獲取&#xff0c;能節省標注時間及精力。現有的大部分方法在進行若監督…

如何添加JWT生成的token在請求頭中

前言 在我們使用JWT來做用戶的驗證時&#xff0c;我們登陸生成對應的token,并加入到請求的參數中發送到后臺提供相關的權限校驗。這個時候我們需要使用到傳遞請求頭參數傳遞的問題&#xff0c;下面是兩種方式。 1.ajax提交方式 1&#xff09;.方法一&#xff1a; $.ajax({ type…

Gradle 使用技巧(二) - SO/NDK過濾

引言 作為一個Android開發人員&#xff0c;so對于我們來講是極其常見的&#xff0c;各種大廠的SDK中都包含著各種各樣的so&#xff0c;而so也是apk瘦身的重要一環&#xff0c;減少so平臺的數量&#xff0c;可以極大限度的減少apk的大小。 Android 中的so 先看一張官方的圖&…

java兩個數之間質數求法,求任意兩個整數之間質數的個數的代碼!!!(新手編寫)...

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓/*** Title:Calculate acount of prime number between preNum and rearNum;* Author: public* Time&#xff1a;2008.12.5 21:09:35*/import java.awt.*;import java.awt.event.*;class Arithmetic{//將計算質數個數的類封裝在此類…

VMware——安裝CentOS

VMware——安裝CentOS 摘要&#xff1a;本文主要記錄了在VMware虛擬機里安裝CentOS的步驟。 下載操作系統 可以從下面的鏡像地址去下載各種版本的CentOS&#xff0c;此次安裝使用的版本是7.2&#xff1a; http://archive.kernel.org/centos-vault/ http://mirror.nsc.liu.se/ce…

django1.4.9 OMserverweb站點管理

1.項目setting.py配置&#xff1a; 2.項目url.py配置&#xff1a; 錯誤提示&#xff1a;auth_user這個表沒有創建&#xff0c;那個因為,admin站點默認數據表需要遷移。執行python manage.py syncdb 會創建所有應用程序需要的數據庫表4.接下來就是根據要求一步一步來&#xff1a…