개발하는 두더지

[Django] Django REST Framework ( DRF ) 와 안드로이드 연동하기 - 1 본문

Django

[Django] Django REST Framework ( DRF ) 와 안드로이드 연동하기 - 1

덜지 2017. 6. 8. 10:32


Django 서버에서 REST framework를 설치하여 REST API를 만들고 안드로이드와 연동해보도록 하겠습니다.



Django 프로젝트 생성, App 생성을 했다는 가정하에 시작하겠습니다.


저는 api 라는 App (사이트) 를 생성했습니다.


Django 프로젝트 생성 참고 (http://duzi077.tistory.com/126)



포스팅 순서는 


1. REST framework 설치


2. 모델 만들기


3. ModelSerializer 만들기


4. ModelViewset 만들기


5. router 설정


6. Web Browser에서 결과 확인


6-2. ngrok 세팅 방법


7. 안드로이드 RETROFIT 설정


8. Call 인터페이스 만들기


9. REST GET, POST, PUT(PATCH) , DELETE 결과 확인



우선 REST API 란?


REST는 Representational State Transfer라는 용어의 약자로 HTTP의 주요 저자인 로이 필딩(Roy Fielding)이란 사람이 웹의 장점을 최대한 활용할 수 있는 아키텍처로 REST를 만들었습니다.


REST의 특징

  • 클라이언트/서버 구조 : 일관적인 인터페이스로 분리되어야 한다.

  • 무상태(Stateless) : 각 요청 간 클라이언트의 콘텍스트가 서버에 저장되어서는 안 된다. 상태정보를 따로 저장하고 관리하지 않고 단순히 들어오는 요청만 처리합니다.

  • 캐시 처리 가능(Cacheable) : HTTP 기존 웹표준을 사용하기 때문에, 웹에서 사용하는 기존 인프라를 그대로 활용이 가능합니다.

  • 자체 표현 구조(Self-descriptiveness) : REST API 메시지만 보고도 이를 쉽게 이해할 수 있는 자체 표현 구조로 되어있음.

  • 계층형 구조 : REST 서버는 다중 계층으로 구성될 수 있으며, 로드 밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘 수 있습니다.

  • 유니폼 인터페이스 : URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍처 스타일을 말함.


REST 규칙

METHOD역할
POSTPOST를 통해 해당 URI를 요청하면 리소스를 생성합니다.
GETGET를 통해 해당 리소스를 조회합니다. 리소스를 조회하고 해당 도큐먼트에 대한 자세한 정보를 가져온다.
PUTPUT를 통해 해당 리소스를 수정합니다.
DELETEDELETE를 통해 리소스를 삭제합니다.


HTTP 응답 상태 코드

상태코드
200클라이언트의 요청을 정상적으로 수행함
201클라이언트가 어떠한 리소스 생성을 요청, 해당 리소스가 성공적으로 생성됨(POST를 통한 리소스 생성 작업 시)
상태코드
400클라이언트의 요청이 부적절 할 경우 사용하는 응답 코드
401클라이언트가 인증되지 않은 상태에서 보호된 리소스를 요청했을 때 사용하는 응답 코드
(로그인 하지 않은 유저가 로그인 했을 때, 요청 가능한 리소스를 요청했을 때)
403유저 인증상태와 관계 없이 응답하고 싶지 않은 리소스를 클라이언트가 요청했을 때 사용하는 응답 코드
(403 보다는 400이나 404를 사용할 것을 권고. 403 자체가 리소스가 존재한다는 뜻이기 때문에)
405클라이언트가 요청한 리소스에서는 사용 불가능한 Method를 이용했을 경우 사용하는 응답 코드
상태코드
301클라이언트가 요청한 리소스에 대한 URI가 변경 되었을 때 사용하는 응답 코드
(응답 시 Location header에 변경된 URI를 적어 줘야 합니다.)
500서버에 문제가 있을 경우 사용하는 응답 코드


REST API 설명 참고 ( http://meetup.toast.com/posts/92 )






1. REST framework 설치


File -> Settings 들어가서 Project interpreter 클릭 후  오른쪽의  +  를 클릭해서 djangorestframework를 설치합니다.



또는 터미널에서 아래의 명령어를 입력합니다.


pip install djangorestframework



그리고 settings.py 에서 

'rest_framework' 를 설정해줍니다.


이제 rest_framework를 사용할 준비가 되었습니다.



2. 모델 만들기


간단하게 버전 정보를 관리하는 모델을 만들어보겠습니다.


models.py



3. ModelSerializer 만들기


모델 인스턴스를 JSON과 같은 형태로 직렬화할 수 있는 Serializer 를 만들어보겠습니다.


serializers.py 파일을 새로만들고


4. ModelViewSet 만들기


ModelViewSet은 GenericAPIView를 상속하고 다양한 메소드를 포함하고 있습니다. 


GenericAPIView를 상속받았기 때문에, queryset 과 serializer_class 를 지정해야 합니다.


또한 GenericAPIView가 제공하는 메소드를 오버라이드할수 있습니다.


이번 포스팅에는 없지만 퍼미션 클래스를 추가시켜 사용자 권한에따라 권한이 없는 사용자는 read만


권한이 있는 사용자는 update, delete 등을 할 수 있는 기능을 다음 포스팅 때 추가하겠습니다.


메소드 종류


list()                    // GET /versions


retrieve()              // GET /versions/1


create()                // POST /versions


update()               // PUT /versions/1


partial_update()      // PATCH /versions/1


destroy()              // DELETE /versions/1


버전 모델에 있는 데이터를 전부 읽어다가 직렬화한 값을 리턴하는 클래스를 만들어보겠습니다.

views.py



5. router 설정


여기서 쓰는 라우터란 URL을 들어오는 요청을 처리하는 로직과 매핑을 시켜주는 역할을 합니다.


REST framework는 URL을 자동으로 Django로 연결시켜주는 기능이 있기 때문에 빠르고 일관적입니다. 


그 중 DefaultRouter를 사용해보도록 하겠습니다. 


SimpleRouter와 비슷하지만 한가지 추가된게 있습니다. 바로 default API root view입니다. 모든 리스트 뷰에대한 하이퍼링크를 포함한 응답을 리턴해준 값들이 출력됩니다. 



urls.py



6. Web Browser에서 결과 확인

브라우저에서 localhost:8000/api/versions 








Comments