- API
- 응용 프로그래밍 인터페이스
 - 애플리케이션과 프로그래밍 방식으로 통신하는 방법
- 개발자가 복잡한 기능을 쉽게 만들 수 있도록 프로그래밍 언어로 제공되는 컴퍼지션
 
 - API를 제공하는 애플리케이션과 다른 소프트웨어 및 하드웨어 간의 간단한 계약(인터페이스)으로 볼 수 있습니다.
 - API는 대신 사용할 수 있는 더 쉬운 구문을 제공하기 위해 복잡한 코드를 추상화합니다.
 
 - 웹 API
- 웹 서버 또는 웹 브라우저용 API
 - 현재 웹 개발은 모든 것을 하나씩 개발하기보다는 여러 개방형 API를 활용하는 경향이 있습니다.
 - 대표적인 타사 개방형 API 서비스 목록
- 유튜브 API
 - 네이버 파파고 API
 - 코코아 맵 API
 
 - API는 다양한 유형의 데이터로 응답합니다.
- HTML, XML, JSON 등
 
 
 
나머지
- 대표 상태 이전
 - API 서버 개발을 위한 일종의 소프트웨어 설계 방법론
 - 리소스를 정의하고 처리하는 전반적인 방법
 
REST API 사용해보기
# my_api/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = (
	path('admin/', admin.site.urls),
	path('api/v1/', include('articles.urls')),
)
# articles/urls.py
from django.urls import path
from . import views
urlpatterns = (
	path('html/', views.article_html),
	path('json-1/', views.article_json_1),
	path('json-2/', views.article_json_2),
	path('json-3/', views.article_json_3),
)
JsonResponse()를 사용한 JSON 응답
- 하나의 문서(HTML)에 응답하는 대신 JSON 데이터에 응답해 보십시오.
 - Django에서 제공하는 JsonResponse 객체를 사용하면 Python 데이터 유형을 응답용 JSON으로 쉽게 변환할 수 있습니다.
 
# articles/views.py
from django.http.response import JsonResponse
def article_json_1(request):
	articles = Article.objects.all()
	articles_json = {}
	for article in articles:
		articles_json.append(
			{
				'id':article.pk,
				'title': article.title,
				'content': article.content,
				'created_at': article.created_at,
				'updated_at': article.updated_at,
			}
		)
	return JsonResponse(articles_json, safe=False)
Django Serializer를 사용한 JSON 응답
- Django의 내장 HttpResponse()를 사용한 JSON 응답
 - JSON의 모든 필드를 수동으로 작성할 필요가 없습니다.
 
# articles/views.py
from django.http.response import JsonResponse, HttpResponse
from django.core import serializers
def article_json_2(request):
	articles = Article.objects.all()
	data = serializers.serialize('json', articles)
	return HttpResponse(data, content_type="application/json")
직렬화
- “직렬화”
 - 데이터 구조 또는 개체 상태를 여러 시스템에서 사용하기 위해 나중에 재구성할 수 있는 형식으로 변환하는 프로세스
 - 대표 포맷: json, xml, yaml
 - Django의 serialize()는 Queryset 및 Model Instance와 같은 복잡한 데이터를 JSON 및 XML과 같은 유형으로 쉽게 변환할 수 있는 Python 데이터 유형으로 변환합니다.
 
Django REST 프레임워크를 사용한 JSON 응답
- 장고 REST 프레임워크(DRF)
- Django에서 Restful API 서버를 쉽게 구축할 수 있게 해주는 오픈 소스 라이브러리입니다.
 - 웹 API 구축을 위한 강력한 툴킷을 제공합니다.
 - 참조: www.django-rest-framework.org/
 
 
# settings.py
INSTALLED_APPS = (
	'...'
	'rest_framework',
	'...'
)
- ModelForm과 유사한 ModelSerializer 구조 및 사용법 확인
 
# articles.serializers.py
from rest_framework import serializers
from .models import Article
class ArticleSerializer(serializers.ModelSerializer):
	class Meta:
		model = Article
		fields '__all__'
# articles/views.py
@api_view()
def article_json_3(request):
	articles = Article.objects.all()
	serializer = ArticleSerializer(articles, many=True)
	return Response(serializer.data)
Django REST 프레임워크 – 단일 모델
- 우편 집배원
- API 구축 및 사용을 위한 플랫폼
 - API를 빠르게 생성할 수 있는 여러 도구와 기능을 제공합니다.
 
 
        
# urls.py
from django.urls import path
from articles import views
urlpatterns = (
	path('articles/', views.article_list),
)
- DRF 설치, 등록 및 패키지 목록 업데이트
- pip 설치 djangorestframework
 
 
ModelSerializer 작성
- 기사/serializers.py 생성
- serializers.py의 위치와 파일 이름은 자유롭게 작성할 수 있습니다.
 
 - ModelSerializer 작성
 
# articles/serializers.py
from rest_framework import serializers
from .models import Article
class ArticleListSerializer(serializers.ModelSerializer):
	class Meta:
		model = Article
		fields = ('id', 'title', 'content',)
- ModelSerializer 클래스는 모델 필드에 해당하는 필드가 있는 Serializer 클래스를 자동으로 생성하는 바로 가기를 제공합니다.
- 모델 정보에 따라 자동으로 필드 생성
 - 직렬 변환기용 유효성 검사기 자동 생성
 - .create() 및 .update()의 간단한 기본 구현을 포함합니다.
 
 
예) QuerySet 객체 직렬화
articles = Article.objects.all()
serializer = ArticleListSerializer(articles, many=True)
serializer.data
... # 데이터 출력됨
RESTful API 구축 – 기사
        
GET – 목록
- 게시물 데이터 목록 검색
 - DRF에 api_view 데코레이터를 작성하는 데 필요합니다.
 
# articles/urls.py
urlpatterns = (
	path('articles/', views.article_list),
)
# articles/views.py
from rest_framework.response import Response
from rest_framework.decorators import api_view
from.models import Article
from.serializer import ArticleListSerializer
# api_view 데코레이터를 통해 GET메서드만 허용. 
@api_view(('GET'))
def article_list(request):
	articles = Article.objects.all()
	serializer = ArticleListSerializer(articles, many=True)
	return Response(serializer.data)
GET – 세부 정보
- 단일 게시물 데이터 검색
 - 각 데이터 조각의 세부 정보를 제공하는 ArticleSerializer 정의
 
# articles/serializers.py
class ArticleSerializer(serializers.ModelSerializer):
	class Meta:
		model = Article
		fields="__all__"
# articles/urls.py
urlpatterns = (
	...
	path('articles/<int:article_pk>/', views.article_detail),
)
# articles/views.py
from .serializers import ArticleListSerializer, ArticleSerializer
@api_view(('GET'))
def article_detail(request, article_pk):
	article = Article.objects.get(pk=article_pk)
	serializer = ArticleSerializer(article)
	return Response(serializer.data)
		![[HTML/CSS] 자주 쓰이는 [HTML/CSS] 자주 쓰이는](https://maria.main.seoul.kr/wp-content/plugins/contextual-related-posts/default.png)