# Restful API Django

REST란? REpresentational State Transfer

  • HTTP를 이용해 통신하는 네트워크상에서 정한 약속
  • 분산 하이퍼미디어 시스템을 위한 소프트웨어 설계 형식
  • 자원을 대표하는 단어 / 식별자로 자원의 상태를 전송하는 방법
  • 자원을 이름으로 구분하여 상태를 전송하는 방법
  • 하위 호환을 깨뜨리지 않고 독립적 발전할 수 있게 도와주는 방법

REST 필요충분조건?

  • Server - Client
  • STATELESS
  • Cache
  • Uniform Interface
  • Layered System
  • Code-On-Demand

API란? Application Program Interface

API
특정방식으로 response나 request를 보내는 형식

RESTAPI란? REST 아키텍쳐 스타일을 따르는 API

HTTP로 CRUD를 구현할 수 있는 API?
-> JSON : 모든 태그가 만들어져 있는 것도 아님 만든 이가 정의하기 나름 -> RESTFUL하지 못함

현재의 RESTFUL API?

Self-Description (x) HATROAS(x) -> 잘 지켜지지 않고 있다!

JSON 직렬화 - Serializer

(Model)Form vs (Model)Serializer

Django Serializer
Form/ModelForm Serializer/ModelSerializer
Model로 부터 Field 읽어옴 =
유효성검사 =
HTML Form JSON 문자열

Serializer

코드

1
$ pip install djangorestframework #REST설치

settings.py

1
2
3
4
#settings.py
INSTALLED_APPS = [
'rest_framework', #rest installed app 에 등록
]

app/urls.py

1
2
3
4
5
6
7
8
9
10
11
12
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from . import views

#Django rest framework -> router -> url

router = DefaultRouter()
router.register('post', views.PostViewSet)

urlpatterns = [
path('',include(router.urls)),
]

app/views.py

1
2
3
4
5
6
7
8
from rest_framework import viewsets
from .models import Post
from .serializer import PostSerializer

#CBV (Class Based View)
class PostViewSet(viewsets.ModelViewSet):
queryset = Post.objects.all()
serializer_class = PostSerializer

serializer.py <=> forms.py

1
2
3
4
5
6
7
8
9
from .models import Post
from rest_framework import serializers

class PostSerializer(serializers.ModelSerializer):
class Meta:
model = Post
#fields = '__all__'
fields = ['id','title','body']
read_only_fields =('title',)

실행화면

실행화면

REST 참고 사이트