[Node.js] 좋은 Rest API 작성 원칙 (feat.주니어용)

2021. 9. 27. 10:54Develop/Node.js

🔎API란?

Application Programming Interface

API라고 하면 나와 같이 대게 프로그래밍을 처음 접하는 사람들은 어려운 단어로 들린다. 하지만 API를 공부하고 나면 정말 쉽다고 생각이 된다. 내가 정의하는 API는 단순하게 아래와 같다.

서로 다른 프로그램간에 소통할 수 있게 도와주는 통신 규약,
즉 '서버에게 요청해서 데이터 가져오는 방법'이 바로 API이다.

그렇다면 수많은 사람이 Rest API라는 단어를 사용하는데 이거는 무슨 뜻일까?
단어는 Representational State Transfe라는 뜻인데 쉽게 풀이하면 API를 디자인하는 방법이라고 할 수 있다.


Roy Fielding라는 아저씨가 그냥 API 잘 짜놓으면 좋다고 만든 6가지 원칙이 현재에서는 거의 정론이 되어있는 것이다. 별거 없다 ^^

Rest API 6가지 원칙

01. Uniform Interface

인터페이스에 일관성이 있어야 된다는 뜻..
하지만 나 같은 주니어 입장에서는 정확히 무슨 뜻인지 이해할 수 없다. 그래서 조금 쉽게 설명하자면

➡️하나의 URL로는 하나의 데이터를 가져와야함

➡️간격하고 예측 가능한 URL를 만들자 (예시 사진)


위 사진처럼 URL만 보면 대략적으로 어떤 데이터를 받아오는지 예측할 수 있다.
(66432번째.. products..를 받아와라..)

02. Client-server 역할 구분하기

➡️고객들은 단순히 URL를 접속하여 이용하는 사람입니다. 혹여나 코드를 고객이 직접 데이터를 가져오거나 서버의 역할을 맡기는 코드는 좋지 않음.

03. Stateless

➡️각각 요청들은 독립적이어야 함. 이게 무슨 뜻이냐면 한 가지 코드에 요청과 응답이 있는데 이것을 독립적으로 작성하는 게 아니라 한 가지 요청에 요청 1, 요청 2 방식으로 작성하여 작성한다면 추후에 유지 보수나 디버깅이 힘들어질 수 있음.
요청 하나만으로 충분히 자료를 가져올 수 있도록 코드를 작성하는 것이 좋음

04. Cacheable

➡️요청을 통해 보내는 자료들은 캐싱이 가능해야 함.

그럼 캐싱이 무엇인가?

예를 들어 네이버를 방문하면 크롬 브라우저는 자동으로 자주 사용하는 이미지 파일, CSS 파일 등을 하드에 저장해놓습니다.

별로 바뀔일 없는 네이버 로고나 아이콘 같은거요.

하드에 저장해놓고 네이버 방문할 때 네이버서버에 네이버 로고주세요~라고 요청하지 않고 하드에서 불러옵니다.

이 행위를 캐싱이라고 합니다.

05. Layered System

➡️요청을 처리하는 곳, DB에 저장하는 곳에 여러가지 단계를 거쳐서 요청을 처리해라.

06. Code on Demand

➡️서버는 고객에게 실제 실행 가능한 코드를 전달할 수 있다.(이거는 잘 이해 안감..)

이렇게 6가지 원칙을 정리해봤는데 어떻게 보면 당연하다고 할 수 있는 부분이지만 계속 상기시키다 보면 코드를 개발할 때 정말 도움이 될 것 같다.

6가지 중 가장 중요하다고 생각되는 Uniform Interface 중 URL 이름을 짓는 것은 많은 연습이 필요할 것 같다. 그래서 유명한 사이트에 접속해 이들은 URL를 어떻게 작성하는지 살펴보고 어떠한 패턴이 있는지 살펴보고 그 원칙을 정리해봤다.

- 단어들은 동사보다 명사 위주로 구성

- 응용하여 다른 정보들을 가져올 수 있도록 일관성 있음

-대충 봐도 어느정도 예측이 가능함

예시 URL
instagram.com/explore/tags/kpop
instagram.com/explore/tags/food
facebook.com/natgeo/photos
facebook.com/bbc/photos