Restful API


画像ソース:https://www.cloudways.com/blog/comprehensive-introduction-rest-api/
Restful API?
Restful APIはAPIシステムを実現するアーキテクチャの中で最も広く使われているフォーマットである.
長所は自己表現力が強く、自分がどんな役を演じているのか一目で分かること.
Web上で使用される各種リソースをHTTP URIと表示し、その動作をHTTPと表示する
メソッドとして定義する方法.すなわち,リソース(HTTP URIと定義)を構造的に簡潔に表現する方法である.
基本的な背景知識
  • URI:サイト内の特定のリソースの場所を示す一意のアドレス(URIとURLの違い)
  • HTTPメソッド:HTTPリクエストの所望の動作(GET、POST等)
  • を定義する.
  • Payload:HTTP要求サーバに送信データ(body)
  • RESTful API設計ガイドライン
    RESTful API設計において最も重要な2つの側面.
    第一に、URIは情報のリソースを表示しなければならない.
    第二に、リソースの挙動をHTTP法(GET、POST、PUT、DELETE)で表す.
    せっけいルール
  • URIは、情報を表すリソースを必要とする.(リソース名は動詞ではなく名詞を使用します)GET /users/show/1->GET /users/1
  • ユーザー/ユーザー、単数/複数の使用は会社によって異なります.現在、多くの人が復讐の傾向を使っています.
  • signup、signin等は一般的に使用されることにより許可される.

  • リソースの挙動はHTTPメソッド(GET,POST,PUT,DELETEなど)として表現される.GET delete/users/1->DELETE /users/1GET /members/insert/2->POST /members/2

  • resource間に関連がある場合は/리소스명/리소스ID/관계 있는 리소스として表される.GET /users/{user_id}/profile
  • HTTP Method
    GET:任意のリソースをクエリーするために使用
    POST:任意のリソースを作成します.
    PUT(PATCH):どのリソースを更新しますか.
    DELETE:どのリソースを削除しますか.
    ステータスコード
    2XX Success
    200 OK
    サーバがクライアント要求を正常に処理するときに使用する応答コード
    201 Created
    サーバがクライアント要求を正常に処理し、新しいリソースがある場合に使用する応答コード.
    (POST、PUTによるリソース作成)
    204 No Content
    クライアントの要求は正常ですが、コンテンツが提供されていない場合は応答コードが使用されます.
    (DELETEによる削除操作)
    4XX Client errors
    400 Bad Request
    クライアント要求が無効な場合に使用される応答コード
    401 Unautorized(認証)
    クライアントが無許可で保護されたリソースを要求するときに使用する応答コード.
    (ログインしていないユーザがログインしている場合、要求可能なリソースが要求されます)
    403 Forbidden(権限)
    ユーザー認証ステータスにかかわらず、クライアントが応答したくないリソースを要求するための応答コード.
    404 Not Found
    クライアントが要求するリソースは存在しません.
    405 Method Not Allowed
    クライアント要求のリソースは、無効化メソッドで使用される応答コードを使用します.
    ステータスコード
    409 Conflict
    クライアント・リクエストがサーバ・ステータスと競合した場合に使用されるレスポンス・コード
    このリクエストを処理するときにビジネスロジックが実行できないか、矛盾が発生します.
    5XX Server errors
    5 XXステータスコードはサーバエラーにより要求を実行できないことを示す
    path parameter & query parameter
    どのリソースを識別するかはpathパラメータを使用します.
    ソートやフィルタリングを行う場合はquery parameterを使用することが望ましい.
    query parameterを使用する場合

  • サーチ時(Searching)、条件時(Filter)?category=1&color=1
  • URLでは&がandかorかは判断できません.白論理で決める.
  • などの演算子を使用して、><を表すことはできません.しかし、?price_bottom=3000のように3000ウォン以上になる.

  • 整列時(Sorting)?order='max_price'

  • ページ番号?offset=0&limit=100
  • は、通常、合計countを同時に送信します.
  • Query parameter適用例
    異なる種類の商品を展示したい場合(フィルタリング)
    # product/views.py
    class ProductView(View):
        def get(self, request):
            category = request.GET.get('category', None)
    
            products = Product.objects.all()
    
            if category:
                products = Product.objects.filter(category=category)
            
            product_list = [{
                'id': product.id,
                'name': product.name,
                (...생략)
                } for product in products
            ]
            return JsonResponse({'data': product_list}, status=200)
    # 프로젝트명/urls.py
    from django.urls import path, include
    
    urlpatterns = [
        path('products', include('product.urls'))
    ]
    # product/urls.py
    from django.urls import path
    from .views import ProductView
    
    urlpatterns = [
        path('', ProductView.as_view()),
    ]
    # Httpie 통신
    http -v GET 127.0.0.1:8000/products category==1
    コメントサイト
    https://meetup.toast.com/posts/92
    https://sanghaklee.tistory.com/61