ジャンゴRESTframeworkデザインRESTfulなAPIに基づいて、

リード

  RESTfulなに関する質問は、最近のインタビューで、多くに遭遇し、一定の理解の前にありましたが、分析した体系はありません。だから今、このプロセスの知識の一部をコーミングしながら、RESTfulなの理解を深めてジャンゴRESTframeworkと組み合わせます。

RESTfulなとは何ですか?

 その後、方言のポイントは、リソースの表現状態転送され、「表現状態転送」:この問題は、我々は最初の問題を分析しなければならない、と考える可能性が最も高い、インターネットは、REST(のRepresentational State転送)、中国語の翻訳についての他の記事話をされます。最初に、我々は、我々は知識がより重要なニーズを学んだポイントを見て、大きな頭を持ってここを参照してください。

資源(リソース)

 ここでのリソースは、ネットワーク上の各エンティティを指し、各エンティティは、対応するURI(Uniform Resource Identifier)を持っている、あなたはリソースにアクセスする必要がある場合、あなたがすることができURIを介してアクセスすることができます。

表現(プレゼンテーション層)

 そのようなので上の画像、HTML、テキスト、およびなどのリソースの単純現れ、。

状態転送(状態の変換)

  クライアントは、HTTP動詞をDELETE、GET、POST、PUTを使用して、リソースを操作することができます。

概要

  HTTP動詞を通じて、ネットワーク全体の資源の観点から見て、その後、URIによって識別されたネットワーク内のノードに配布し、クライアントとサーバは、いくつかの配信リソースのプレゼンテーション層であり、クライアントにREST、サーバリソース達成するための操作、「状態の変換式を。」(式:クライアントがリソースを要求し、リソースを取得するためにサーバによって)
 、これらのアプリケーションの上記の制約と原則を満たすか、デザインはRESTfulなです。つまりRESTfulなは規範と制約のアーキテクチャです。

RESTfulなAPI

デザインのAPI利用規約、RESTfulなは、一般的にWebデータ・インタフェースを設計するために使用される一般的な設計仕様は、今です。ここでは、インターネットからのデザインのいくつかのRESTful APIの一般的な概要の詳細について話をします。

URI设计

1、動詞+オブジェクト

 クライアントが使用する「動詞+オブジェクト」サーバ・リソースを操作する構造を、動詞は、オブジェクトがリソースを参照、HTTP動詞を指します。HTTP動詞操作に対応したサーバリソース:

  • GET(SELECT):サーバー(1以上)からリソースを削除します。
  • POST(CREATE):サーバ上に新しいリソース。
  • PUT(UPDATE):サーバーに(クライアントが提供する完全なリソースを変更した後)リソースを更新します。
  • PATCH(UPDATE):(プロパティを変更するには、クライアントによって提供される)の更新リソースサーバーインチ
  • DELETE(削除):サーバーからリソースを削除します。

図2に示すように、オブジェクトは名詞でなければなりません

 API URI内のオブジェクトは、HTTP動詞の役割の対象であるので、名詞ではなく動詞でなければなりません。

3、复数URI

 URIのために複数の使用をお勧めします

図3に示すように、マルチレベルURIを避けます

ステータスコード

すべてのクライアント要求は、サーバーの応答が与えられ、応答のHTTPステータスコードは二つの部分とデータを備えています。
HTTPステータスコードの意味:

  1. 1xx:情報
  2. 2XX:成功した操作
  3. 300番台:リダイレクション
  4. 4XX:クライアントエラー
  5. 5xxの:サーバーエラー

サーバーの応答

1、プレーンテキストに戻りません。

 APIが返すデータフォーマットはJSONオブジェクトである必要があり、プレーンテキストではありません、これは構造化されたプロセスと一致しています。同じプロパティの同じサーバ応答HTTPのContent-Typeヘッダは、アプリケーション/ JSONに設定されます。

2、エラーが発生した場合、200のステータスコードを返しません。

 これは、データ操作が失敗した完全体分析を知る必要につながるため、エラーが発生した場合、それは、データボリューム上のエラーメッセージ、その後、200のステータスコードを返すべきではありません。

ジャンゴRestFramework

ジャンゴRestFrameworkは非常に適切である開発モデルの面で「前の分離および後端部」のように彼らのAPIをテストするために、また簡単に、独自のテストページでDjangoのウェブAPIに沿ってRESTfulなスタイルを構築するに基づいています。

分離の前後端に

 リア分離爪の前後端はデータ・インターフェースを提供するだけで、もはやテンプレートをレンダリングしていない、と遠位端部は、データのみのプレゼンテーションが必要です。これは多くの利点があります。

  • デカップリング前端と後端、多重化インターフェース、開発を低減量
  • 効率を向上させ、同期開発の終了前と後に、その職務を遂行、優れたインタフェース仕様になります
  • デバッグ、テストおよび運用・保守のためのより有用

ジャンゴRestFrameworkプロフィール

残りのフレームワークの基本コンポーネント:

  • APIView
  • パーサ構成要素:データ要求を解析し、要求が異なるタイトルに従って解析されます
  • シリアライゼーションコンポーネント:Djangoのフォームと同様に、所望のデータがカスタム・アクションの形によって得ることができます
  • Viewクラス(ミックスイン)
  • 認定コンポーネント
  • 権限のコンポーネント
  • 周波数成分
  • ページングコンポーネント
  • 応答アセンブリ
  • URLレジストラ

プロセスフロー

 Djangoのビュー関数について、に基づくことができるFBVモードもCBVモードに基づくことができます

  • FBVモード:Djangoのルートマップテーブルを関連付けるURLとビュー機能
  • CBVモード:とCBVモデルは、(、、ポストを得る置く、削除などviews.pyビュークラス、ビュークラスでビュー機能、で定義されている ) など、
     DjangoのRESTFrameworkがベースとCBVモードを、Djangoのhttpリクエストが到着したとき、この方法は、最初のミドルウェアを行い、その後、一致するルートを行います。

ジャンゴRESTframeworkデザインRESTfulなAPIに基づいて、

 ルート一致が、カスタムクラス行う場合as_view()メソッドがある場合、親クラスは、その後の呼び出し、as_view()メソッドをコールしません()ディスパッチ異なる方法を実行し、異なる要求リクエストを処理するための方法。(ジャンゴCBVモード処理この処理の流れ、ならびに知識のいくつかのソースに設計されました)

ジャンゴRESTframework使用

プロジェクトの構成

Djangoのrestframeworkをインストールします。

pip install djangorestframework

ジャンゴRESTframeworkデザインRESTfulなAPIに基づいて、

新しいプロジェクト、新しいアプリケーションは、settings.pyを修正します

django-admin startproject Crawl
cd Crawl
python manage.py startapp music

settings.py(rest_frameworkはINSTALLED_APPSに追加されます)

ジャンゴRESTframeworkデザインRESTfulなAPIに基づいて、

(その他の構成は、言語、タイムゾーンを変更し、データベースを変更、ない1リストされている)
のプロジェクトファイルツリー:

ジャンゴRESTframeworkデザインRESTfulなAPIに基づいて、

プロジェクトデータベースの設計

设计一个有关于存储歌曲的详细信息表(music/models.py):

from django.db import models

class Music(models.Model):
    music_author = models.CharField(max_length=50, verbose_name='歌唱者')
    music_name = models.CharField(max_length=100, verbose_name='歌曲名')
    music_album = models.CharField(max_length=100, verbose_name='专辑')
    music_time = models.CharField(max_length=10, verbose_name='歌曲时间')
    music_type = models.CharField(
        max_length=100, null=True, verbose_name='歌曲类型', default=None)
    music_lyrics = models.CharField(
        max_length=100, blank=True, verbose_name='作词者')
    music_arranger = models.CharField(
        max_length=100, blank=True, verbose_name='作曲者')

同步数据库:

python manage.py makemigrations
python manage.py migrate

Serializers

创建一个序列化Serialier类,提供序列化和反序列化的途径,使之可以转化为如json的表现形式,类似于Django的Form表单的原理。在music目录下,创建serializers.py:

from rest_framework import serializers
from music.models import *

class MusicSerializer(serializers.ModelSerializer):
    class Meta:
        fields = '__all__'
        model = Music

Views.py和Urls.py

通过前面提到的CBV模式,设计视图处理函数和路由映射:
Crawl/urls.py

from django.contrib import admin
from django.urls import path, include
import music

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include('music.urls')),
]

music/urls.py

from django.urls import path
from music.views import *

urlpatterns = [
        path('', MusicList.as_view()),
        path('<int:pk>/', MusicDetail.as_view()),
        ]

music/views.py

from django.shortcuts import render
from rest_framework import generics
from rest_framework.views import APIView
from rest_framework.response import Response
from music.models import *
from music.serializers import MusicSerializer

# Create your views here.

class MusicList(APIView):
    def get(self, request):
        queryset = Music.objects.all()
        ret = MusicSerializer(queryset, many=True)
        return Response(ret.data)

    def post(self, request):
        music = MusicSerializer(data=request.data)

        if music.is_valid():
            music.save()
            return Response(music.data)
        else:
            return Response(music.errors)

class MusicDetail(generics.RetrieveAPIView):
    queryset = Music.objects.all()
    serializer_class = MusicSerializer

代码详解:

 代码比较简单,主要就是继承restframework框架的通用视图函数generics,或者APIView。如果先省事,建议generics,因为提供的通用视图可以允许你快速构建与数据相关的API视图,当然如果觉得通用视图不适合自己的API需求,可以使用APIView类。
(在这里两种方式都用到了,可以对比他们的区别)

测试结果

模拟请求API接口(GET、POST请求)
ジャンゴRESTframeworkデザインRESTfulなAPIに基づいて、

ジャンゴRESTframeworkデザインRESTfulなAPIに基づいて、
ジャンゴRESTframeworkデザインRESTfulなAPIに基づいて、

自带的测试页面:
ジャンゴRESTframeworkデザインRESTfulなAPIに基づいて、

总结

刚开始接触到RESTful方面的知识还是非常懵的,对网上很多文章感觉讲的也不是很全面,所以索性总结一下,然后接触到RESTFramework框架也发现到了很多在Django方面不熟悉的地方,如CBV模式,以及工作的原理,有些都牵扯到框架内的源码,也是从网上一些优秀的文章一点点慢慢了解到,之后对Django RESTframework相关知识也会继续总结学习,下面是我在网上参考的一些文章,有兴趣的可以了解一下。

参考链接:

https://www.cnblogs.com/renpingsheng/p/9531649.html
https://www.cnblogs.com/renpingsheng/p/9534984.html#FeedBack
https://www.jianshu.com/p/08a998f74ac7

おすすめ

転載: blog.51cto.com/mbb97/2431272