LINUX - "vim-rest-console" 플러그인으로 API 테스트 스크립트 개발하기

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 파일을 생성해보자.

  1. vim 모드에서 :set filetype=rest 를 입력하고 엔터를 치면 vim의 filemode가 rest로 변경된다.

  2. 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 종료 
  1. local section 로컬 섹션에는 개별 request를 정의한다. 로컬 섹션에서는 글로벌 섹션에서 정의한 global variable을 사용하거나 재정의할 수 있다. (주의) 개별 request는 --(two dashes)로 구분한다.
rest 파일 실행해 API 테스트

실행하고 싶은 request에 커서를 위치하고 Ctrl+j를 입력하면 오른쪽에 API 결과값을 확인할 수 있다.

Reference

Vundle Install Git-repo

Vundle 설치 한국어

vim-reset-console Gir-repo

vim-reset-console usage blog