Problem
Backend API를 개발하고 난 후에는 API가 제대로 동작하는지 검증 해야한다.
만약 API가 파이썬으로 개발됐다면 우선적으로 파이썬 환경에서 여러 케이스에 잘 작동하는지 검증해야한다. 이 작업이 끝나면 client(ex. web service)가 API를 호출했을 때, http 통신에 오류가 없는지 확인해야한다. 즉, client의 request를 받아 올바른 reponse를 반환하는지 확인해야 한다.
이 페이지에서는 후자를 테스트하는 경우, vim의. “vim-rest-console” 플러그인을 사용해 검증을 좀 더 쉽고 빠르게 하는 방법을 알아본다.
Original Method using Curl
- curl
리눅스에서 데이터 통신할 때 사용하는 명령어가 curl
이다.
curl 명령어는 http, https, ftp 등 주요 protocol를 지원하며 donwload, upload 기능을 갖고 있다.
Backend API가 처리한 데이터를 http 통신으로 client에게 전송할 때(=upload, response) 아래와 같이 입력한다.
curl -X POST -H "Content-Type: application/json -d {"name" : "Christina", "dog_name" : "daewang"}" http://localhost/test.json
- -X : HTTP 요청 메소드(GET, POST, …) 입력
- -H : 헤더 (header) 입력
- -d : 전송할(request) 데이터 입력
이 때 주의할 점은 curl 명령어는 url 인코딩을 해주지않기 때문에 url 입력시에는 url-encoded 형태로 기입한다. 예를 들어 공백은 “%20”처럼 입력해야한다. 최신 버전의 curl(7.18.0이후)은 --data-urlencode
옵션을 사용하면 자동으로 url encoding을 지원한다.
Vim-rest-console Method
리눅스 운영체제에서 vim 텍스트 에디터를 사용 중이라면, “vim-rest-console” vim 플러그인을 설치해 사용하기를 추천한다. 하나의 스크립트 창에서 여러 API에 요청을 보내고 응답을 확인할 수 있어, 매번 curl
명령어로 API를 요청해 결과물을 확인해야하는 수고를 덜어주기 때문이다. 본격적으로 설치 및 사용 방법을 알아보자.
1. Vundle(vim plugin manager) 설치
Vundle은 vim의 다양한 플러그인을 관리해주는 프로그램이다.
Vundle Install Git-repo 이 곳의 설명을 따라 설치한다.
설치가 완료되면 나의 ~/.vim/bundle
의 하위 디렉토리에 Vundle.vim
이란 폴더가 아래 사진과 같이 생성되었을 것이다.
2. “vim-rest-console” 플러그인 설치
이제 Vundle 설치를 완료했으니, 다음으로는 나의 ~/.vimrc
파일에 “vim-rest-console”플러그인을 설치해보자. 아래 그림처럼 설치 명령어를 ~/.vimrc
파일 상단에 입력한다.
플러그인 설치는 vim
명령어를 입력해 창을 열고 :PluginInstall
명령어를 입력한다. 아래와 같이 “Done!” 메시지가 나오며 플러그인 설치가 완료된다.
3. rest 파일 생성 및 사용
rest파일이란, restAPI로 통신을 지원하는 파일을 말한다. rest, restAPI란 무엇일까?
REST
REST는 ‘REprsentational State Transfer’의 약자로, 이는 자원을 주고 받을 때 자원의 상태를 표현하여 통신한다는 뜻을 갖는다.
REST의 구성 요소는 다음과 같다.
- 자원(resoure): URI(uniform resource identifier) 자원의 고유 id
- 상태(state): HTTP method
- 표현(representation)
즉, REST는 URI로 자원을 표시하고, HTTP method로 자원의 CRUD(create, read, update, delete) 작업 상태를 표현한다.
REST의 특징은 다음과 같다.
- uniform interface
- http 표준만 따른다면 모든 인터페이스를 지원한다.
- stateless
- client의 상태 정보를 저장하지 않는다. 따라서 client의 요청들은 server에서 독립적으로 처리된다.
- cacheable
- http의 캐싱 기능이 적용된다.
- self-descriptiveness
- REST API 메시지만 보고 작업 내용을 알 수 있다.
- client-server
- server는 API를 제공하고 자원을 처리하는 역할만, client는 로그인 정보나 인증을 직접 관리하는 역할만을 맡는다. 따라서 server, client 의존성이 줄어든다.
- layered system
- API server와 client 중간에 proxy, gateway와 같은 네트워크 매체를 추가할해 보안을 향상할 수 있다.
REST API
REST의 규칙을 지켜 설계된 API를 의미한다.
REST API는 client로부터 HTTP URI 자원 (ex. /users/321
)을 입력받아 server에서 HTTP method대로 처리(crud 작업)한다. 예를 들어 GET http://localhost/users/321
는 user 321 정보를 표시하도록 한다.
rest 파일 생성
본격적으로 rest 파일을 생성해보자.
-
vim 모드에서
:set filetype=rest
를 입력하고 엔터를 치면 vim의 filemode가 rest로 변경된다. -
global section 글로벌 섹션에는 다음과 같은 정보를 global 변수로 지정해 사용할 수 있다.
- url 입력
- header 입력
- variable 입력
(주의) 글로벌 섹션 입력을 완료하면
--
(two dashes)로 닫아준다.
http://localhost/test.json # global 하게 사용되는 url을 입력
Accept : application/json # global 하게 사용되는 header를 입력
Content-Type : application/json
name = "christina" # global variable 설정
dogname = "daewang"
-- # global unit 종료
- local section
로컬 섹션에는 개별 request를 정의한다. 로컬 섹션에서는 글로벌 섹션에서 정의한 global variable을 사용하거나 재정의할 수 있다.
(주의) 개별 request는
--
(two dashes)로 구분한다.
rest 파일 실행해 API 테스트
실행하고 싶은 request에 커서를 위치하고 Ctrl+j를 입력하면 오른쪽에 API 결과값을 확인할 수 있다.