본문 바로가기
개발/Django

[Django] REST framework를 이용한 Rest API 사용해보기

by char_lie 2023. 4. 24.
반응형

https://edder773.tistory.com/212

 

[Django] OPEN API를 이용하여 값 출력해보기

https://edder773.tistory.com/88 [Django] 기초 무작정 시작하기 - Part 1 Django 기초부터 무작정 시작하기 Django를 하면서 처음 사용하는 것부터 시작해서 하나씩 개념 정리하기 위해 작성하는 포스팅 아래를

edder773.tistory.com

해당 Rest API를 사용하기 위한 초기 세팅은 위 글을 바탕으로 시작


 

REST API 사용하기
REST
- Representational State Tranger로 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 것을 의미
- HTTP URI를 통해 자원을 명시하고 HTTP Method를 통해 해당 자원에 대한 CRUD 연산을 적용하는 것
- 지금은 JSON을 통해서 자원을 표현할 것

Serialization
- 직렬화과정으로 여러 시스템에서 활용하기 위해 데이터 구조나 객체 상태를 나중에 재구성할 수 있는 포맷으로 변환하는 과정
- Django의 serialize()는 복잡한 데이터를 JSON, XML 등의 유형으로 쉽게 변환할 수 있는 python 데이터 타입으로 변환

먼저, serializer를 설정해 주기 전에, models.py에서 내가 필요한 데이터를 설정해 주자.

위에 OPEN API를 통해서 데이터를 가져올 것이기에 models.py에서 내가 필요한 데이터를 가져오도록 Products 클래스를 정의하자.

# model.py

from django.db import models

class Products(models.Model):
    fin_prdt_cd = models.TextField(unique=True)
    kor_co_nm = models.TextField()
    fin_prdt_nm = models.TextField()
    etc_note = models.TextField()
    join_deny = models.IntegerField()
    join_member = models.TextField()
    join_way = models.TextField()
    spcl_cnd = models.TextField()

모델을 추가했으니 꼭 DB에 반영하기 위해 migrate를 진행해 주자

python manage.py makemigrations
python manage.py migrate

이제 ModelForm과 유사한  ModelSerializer 구조를 사용하자. 이를 구성하기 위해서 serializer.py를 만들어서 다음과 같이 지정하자.

from rest_framework import serializers
from .models import Products

class ProductsSerializer(serializers.ModelSerializer):
    class Meta:
        model = Products
        fields = '__all__'

이제 views.py에서 이를 활용해 데이터를 가져와보자.

#views.py

from django.shortcuts import get_object_or_404, get_list_or_404
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import status
from django.conf import settings
import requests, json
from .serializers import ProductsSerializer

API_KEY = settings.API_KEY

@api_view(['GET'])
def products(request):
    url = 'http://finlife.fss.or.kr/finlifeapi/depositProductsSearch.json'
    params = {
        'auth': API_KEY,
        'topFinGrpNo': '020000',
        'pageNo': '1'
    }
    response = requests.get(url, params=params)
    products_data = response.json()['result']['baseList']
    product_serializer = ProductsSerializer(products_data, many=True)

    return Response(product_serializer.data)

ModelSerializer의 경우 Queryset 또는 객체 모록을 serialize 하려면 many=True 설정을 해줘야 한다.

다음과 같이 작성했다면, 서버가 정상적으로 작동하는지 확인해 보자.

다음과 같이 원하는 데이터만  정상적으로 추출하도록 구성할 수 있다.

 

반응형

댓글