티스토리 뷰

728x90

벌써 두 번째 포스팅입니다. 지난 포스팅에서 Django를 설치하고 기본적인 가상환경 셋팅을 마쳤습니다.

 

 

Django로 RESTful API 서버 구축해보기 (0) - Django 설치와 가상환경설정

작년 졸업프로젝트를 할 때 Django Framework를 사용하여 웹 서비스를 하나 구현했었습니다. Django의 MTV구조와 같은 기본적인 개념들은 얼추 이해가 되었지만, 베이스 지식이 많이 부족한 상태로 진

recordofwonseok.tistory.com

 

이번 포스팅에서는 REST API 서버를 테스트하기 위한 REST API Client tool인 insomnia를 설치하고 request를 생성하고 Django REST framework를 설치하여 REST API 서버를 기본적으로 구축해보겠습니다.

 

 

1. Insomnia 설치

 

insomnia는 REST API의 Client측 역할을 수행하는 프로그램입니다. 만약 여러분이 REST API 서버를 구축했는데 이 서버가 정상적으로 작동하는지 확인하고 싶다면 직접 request를 생성하거나 curl를 사용해야 할 것입니다.

 

insomnia는 이러한 과정을 대신 수행해주어 서버 테스트에 편의성을 높여줍니다.

 

https://insomnia.rest/download

 

Download

Download Insomnia the best API Client for REST, GraphQL, GRPC and OpenAPI design tool for developers

insomnia.rest

 

위 링크에서 insomnia를 설치할 수 있습니다.

 

설치 후 insomnia를 실행하면 아래와 같은 화면이 보일 것입니다.

이 화면에서 Ctrl + n 을 누르게 되면 새로운 request를 생성할 수 있습니다.  

 

 

여기서 Name 부분에 API 이름을 설정하고 오른쪽 GET 이라고 쓰여있는 드롭다운 창에는 어떤 방식으로 요청을 보낼 것인지 선택할 수 있습니다. 

저는 GET 방식을 선택하겠습니다. 

 

create를 누르면 아래와 같이 TEST API라는 새로운 요청이 생성됩니다.

 

 

또한 주소를 입력하는 칸에 로컬호스트를 의미하는 https//127.0.0.1:8000 를 입력해주었습니다.

Send 버튼을 눌러 요청을 실행하면....

 

 

200 OK 응답과 함께 Django 서버에 정상적으로 연결되는 것을 볼 수 있습니다.

 

이제 REST API 서버를 테스트 할 모든 준비가 끝났습니다. Django로 이동하여 api 서버를 구축해보겠습니다.

 

 

 


 

2. Django REST framework 설치​​

 

https://www.django-rest-framework.org/

 

Home - Django REST framework

 

www.django-rest-framework.org

위 링크의 공식문서에서 Django REST framework를 설치하는 올바른 가이드를 볼 수 있습니다.

 

pip install djangorestframework
pip install markdown       # Markdown support for the browsable API.
pip install django-filter  # Filtering support

명령어를 차례대로 입력하여 필요한 모듈을 설치해주면 됩니다.

 

또한, 추가해야 할 소스들이 몇 가지 있습니다.

공식문서에서 지시하는 대로 따라보겠습니다.

 

1. settings.py의 INSTALLED_APPS에 "rest_framework" 추가하기

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
]

 

2. settings.py에 아래 코드 추가하기 (API의 접근 권한을 설정하는 코드라고 합니다,)

REST_FRAMEWORK = {
    # Use Django's standard `django.contrib.auth` permissions,
    # or allow read-only access for unauthenticated users.
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
    ]
}

 

3. urls.py의 urlpatterns에 해당 경로 추가하기 (path('api-auth/', include('rest_framework.urls')))

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

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

 

이렇게 셋팅하면 REST API를 구축하기 위한 설정이 끝난 것입니다.

 

 

공식문서에서 지시한 대로

urls.py에 아래 코드를 넣고 실행해보겠습니다. 아래는 샘플 코드로 샘플 REST API 통신을 진행할 수 있다고 합니다.

from django.urls import path, include
from django.contrib.auth.models import User
from rest_framework import routers, serializers, viewsets

# Serializers define the API representation.
class UserSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = User
        fields = ['url', 'username', 'email', 'is_staff']

# ViewSets define the view behavior.
class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer

# Routers provide an easy way of automatically determining the URL conf.
router = routers.DefaultRouter()
router.register(r'users', UserViewSet)

# Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
urlpatterns = [
    path('', include(router.urls)),
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

 

위 코드를 실행하고 http://127.0.0.1:8000으로 접속하면 REST API 샘플 서버가 실행됩니다. 

 

브라우저 api에서 현재 설정되어 있는 Api 루트 중 users 루트가 존재 하고 현재 나와있는 "http://127.0.0.1:8000/users/"로 접속할 수 있다는 메시지가 응답되었습니다. 따라서 해당 ip경로로 접속하면 다음과 같은 화면이 나옵니다.

 

위 화면의 의미는 GET 방식으로 ROOT 하위의 /users/ 경로로 요청이 들어왔다는 것을 의미하고 GET, POST, HEAD, OPTIONS 작업을 허용한다는 것입니다. 현재 user는 아무도 등록되어있지 않기 때문에 [] 빈 괄호로 표현되는 것을 볼 수 있습니다.

 

Django 서버에서 superuser를 생성하여 user데이터를 만든 뒤 해당 API에 어드민 권한으로 접근할 수 있도록 해보겠습니다.

 

python manage.py createsuperuser

 

위 명령어를 통해 슈퍼유저를 생성했습니다. (비밀번호를 1234로 지정해서 너무 짧다는 경고 메시지가 나오는 것입니다.)

 

 

이제 브라우저 API를 새로고침해보면 admin 유저가 생성된 것을 볼 수 있습니다.

 

오른쪽 위의 Log In을 클릭하여 admin 계정으로 로그인한 후 아래에 폼에 testUser라는 유저를 생성해보겠습니다.

CRUD Operation의 Create 역할을 수행하는 POST 요청으로 testUser를 생성한 이후에,

 

 

 

다시 GET /users/로 돌아가면 testUser가 정상적으로 추가된 것을 볼 수 있습니다.

 

 

추가적으로, 자원 생성 시 고유한 ID값이 부여되어 admin의 경우 1, testUser의 경우 2번 인덱스로 접근할 수 있습니다.

 

/users/(숫자) 의 형태로 접근할 수 있습니다.

 

예를 들어, /users/2 로 접근한다면 User Instance 화면에서 testUser의 정보를 볼 수 있게 됩니다.

 

이제 아까 설치했던 insomnia를 통해 http://127.0.0.1:8000/users/ 에 GET 요청을 보내게 되면 정상적으로 유저 정보가 넘어오는 것을 확인할 수 있습니다. 

 

 

 

REST API 서버의 구축은 완료되었습니다 .다음 포스팅에는 가상 데이터를 생성하여 실제 API가 동작하는 것처럼 무언가 만들어 보겠습니다.

320x100
댓글
© 2022 WonSeok, All rights reserved