1. 程式人生 > >RESTful架構&簡單使用Django rest framework

RESTful架構&簡單使用Django rest framework

轉移 hit 互動 eat serial query web resources 格式

RESTful架構

1 什麽是REST

REST全稱是Representational State Transfer,中文意思是表述性狀態轉移。 它首次出現在2000年Roy Fielding的博士論文中,Roy Fielding是 HTTP 規範的主要編寫者之一。 他在論文中提到:“我這篇文章的寫作目的,就是想在符合架構原理的前提下,理解和評估以網絡為基礎的應用軟件的架構設計,得到一個功能強、性能好、適宜通信的架構。REST指的是一組架構約束條件和原則。” 如果一個架構符合REST的約束條件和原則,我們就稱它為RESTful架構。

REST本身並沒有創造新的技術、組件或服務,而隱藏在RESTful背後的理念就是使用Web的現有特征和能力, 更好地使用現有Web標準中的一些準則和約束。雖然REST本身受Web技術的影響很深, 但是理論上REST架構風格並不是綁定在HTTP上,只不過目前HTTP是唯一與REST相關的實例。 所以我們這裏描述的REST也是通過HTTP實現的REST。

2 理解RestFul

http://www.linuxeye.com/architecture/1713.html

技術分享圖片
1、名稱

Fielding將他對互聯網軟件的架構原則,定名為REST,即Representational State Transfer的縮寫。我對這個詞組的翻譯是"表現層狀態轉化"。

如果一個架構符合REST原則,就稱它為RESTful架構。

要理解RESTful架構,最好的方法就是去理解Representational State Transfer這個詞組到底是什麽意思,它的每一個詞代表了什麽涵義。如果你把這個名稱搞懂了,也就不難體會REST是一種什麽樣的設計。

2、資源(Resources) REST的名稱"表現層狀態轉化"中,省略了主語。"表現層"其實指的是"資源"(Resources)的"表現層"。 所謂"資源",就是網絡上的一個實體,或者說是網絡上的一個具體信息。它可以是一段文本、一張圖片、一首歌曲、一種服務,總之就是一個具體的實在。你可以用一個URI(統一資源定位符)指向它,每種資源對應一個特定的URI。要獲取這個資源,訪問它的URI就可以,因此URI就成了每一個資源的地址或獨一無二的識別符。 所謂"上網",就是與互聯網上一系列的"資源"互動,調用它的URI。 3、表現層(Representation) "資源"
是一種信息實體,它可以有多種外在表現形式。我們把"資源"具體呈現出來的形式,叫做它的"表現層"(Representation)。 比如,文本可以用txt格式表現,也可以用HTML格式、XML格式、JSON格式表現,甚至可以采用二進制格式;圖片可以用JPG格式表現,也可以用PNG格式表現。 URI只代表資源的實體,不代表它的形式。嚴格地說,有些網址最後的".html"後綴名是不必要的,因為這個後綴名表示格式,屬於"表現層"範疇,而URI應該只代表"資源"的位置。它的具體表現形式,應該在HTTP請求的頭信息中用Accept和Content-Type字段指定,這兩個字段才是對"表現層"的描述。 4、狀態轉化(State Transfer) 訪問一個網站,就代表了客戶端和服務器的一個互動過程。在這個過程中,勢必涉及到數據和狀態的變化。 互聯網通信協議HTTP協議,是一個無狀態協議。這意味著,所有的狀態都保存在服務器端。因此,如果客戶端想要操作服務器,必須通過某種手段,讓服務器端發生"狀態轉化"(State Transfer)。而這種轉化是建立在表現層之上的,所以就是"表現層狀態轉化"。 客戶端用到的手段,只能是HTTP協議。具體來說,就是HTTP協議裏面,四個表示操作方式的動詞:GET、POST、PUT、DELETE。它們分別對應四種基本操作:GET用來獲取資源,POST用來新建資源(也可以用於更新資源),PUT用來更新資源,DELETE用來刪除資源。 5、綜述 綜合上面的解釋,我們總結一下什麽是RESTful架構:   (1)每一個URI代表一種資源;   (2)客戶端和服務器之間,傳遞這種資源的某種表現層;   (3)客戶端通過四個HTTP動詞,對服務器端資源進行操作,實現"表現層狀態轉化"7、誤區 RESTful架構有一些典型的設計誤區。 最常見的一種設計錯誤,就是URI包含動詞。因為"資源"表示一種實體,所以應該是名詞,URI不應該有動詞,動詞應該放在HTTP協議中。 舉例來說,某個URI是/posts/show/1,其中show是動詞,這個URI就設計錯了,正確的寫法應該是/posts/1,然後用GET方法表示show。 如果某些動作是HTTP動詞表示不了的,你就應該把動作做成一種資源。比如網上匯款,從賬戶1向賬戶2匯款500元,錯誤的URI是:
補充理解

https://www.cnblogs.com/alex3714/articles/6808013.html

  

3.Restful API設計指南

https://www.cnblogs.com/alex3714/articles/6808013.html

4.認證機制

https://www.cnblogs.com/chinajava/p/5871305.html

簡單使用Django rest framework

前期數據庫準備

from django.db import models

# Create your models here.

class User(models.Model):
    name=models.CharField(max_length=20,verbose_name="姓名")
    passwd=models.CharField(max_length=30,verbose_name="密碼")

 

rest_view.py

技術分享圖片
from Test import models
from Test import rest
from rest_framework import  viewsets

# ViewSets define the view behavior.
class UserViewSet(viewsets.ModelViewSet):
    #把數據取出來
    queryset = models.User.objects.all()
    # 讓數據進行序列化
    serializer_class = rest.UserSerializer
視圖函數

  

rest.py

技術分享圖片
#用來序列化數據
from Test import models
from rest_framework import serializers

# Serializers define the API representation.
class UserSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = models.User
        fields = (name,passwd)
序列化

  

urls.py

技術分享圖片
from django.conf.urls import url, include
from django.contrib import admin
from django.urls import path
from Test import  rest_view
from rest_framework import routers


# Routers provide an easy way of automatically determining the URL conf.
router = routers.DefaultRouter()
router.register(rusers,rest_view.UserViewSet)

# Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
# urlpatterns = [
#
#     url(r‘^api-auth/‘, include(‘rest_framework.urls‘, namespace=‘rest_framework‘))
# ]

urlpatterns = [
    path(admin/, admin.site.urls),
    url(r^api/, include(router.urls)),
]
路由

1.把數據從數據庫中取出來,並序列化,創建一個負責序列化的類

2.將數據庫裏的數據,交給序列化的類去進行序列化

3.將學校返回給前端

  

更多使用

http://www.cnblogs.com/alex3714/articles/7131523.html

https://www.django-rest-framework.org/

RESTful架構&簡單使用Django rest framework