web/Web

REST API 효율적인 설계 방법

반응형

REST 구성

구성 요소
표현방법
내용
Resource
HTTP URI
자원을 정의
Verb
HTTP Method
자원에 대한 행위를 정의
Representations
HTTP Message Pay Load
자원에 대한 행위의 내용을 정의

ex)
Resource : /wedul/member
Verb : HTTP POST
Representations : 
{
   "id" : "wedul"
}

REST 특성

1. 유니폼 인터페이스
-> HTTP 표준만 따르면 어떠한 기술이든 사용가능 (HTTP/JSON, HTTP XML)

2. 무상태성 (STATELESS)

3. 캐시 가능
-> 웹 캐시, CD을 이용한 캐싱 가능

4. 자체 표현 구조 (SELF-DESCRIPTIVENESS)
-> API 내용만 보고도 별도의 문서 없이도 쉽게 이해가 가능하다.


REST 설계 패턴

- API URL만 보고도 무슨 API인지 쉽게 직간적으로
- URL을 길게 만들지 말고 2 depth 수준 까지만 
  > /dogs/
  > /dogs/uki
- 대상은 명사가 되야한다.
ex) getDogs (X), /dogs/ (O)
- 단수보다는 복수형을 사용
/dog (X), /dogs (O)

HTTP Response code
- 총 70개있는 것 중에 권장하는 Response code 사용
> 200 : 성공
> 400 : Bad Request - Field validation 실패
> 401 : 인증, 인가 실패
> 404 : 해당 리소스 찾을 수 없음
> 500 : Internal Error - 서버에러

에러처리
-> 상세 내용은 HTTP body에 표현해 주어야 한다.
-> Error Stack이 노출되지 않도록 조심해야한다.
{
  "error" : 200,
  "message" : "massage sending failed",
  "detail" : "Id Logouted"
}



API 인증방식
1. API 키 방식
-> API 호출할때, API KEY를 보내는 방식 
-> 키가 한번 뚫리면 문제가 발생

2. API 토큰 방식
-> ID, PASSWORD를 사용하여 일정 기간 유효한 API 토큰을 리턴하고, 매 호출마다 토큰 사용
2.1) HTTP BASIC AUTH
  => ID, PASSWORD를 직접 보낸다.
 2.2) DIGEST ACCESS AUTHENTICATION
  => 패스워드를 네트워크를 통해서 보내지 않고, 클라이언트와 서버에서 공통적인 키를 이용해서 패스
  워드에 대한 해쉬를 생성하고 이를 비교하는 방식 (프로젝트에서 경험해 봄)

3. 사용자 인증 방식
 1.1) 3자 인증 방식
  => 계정 정보를 다른 서비스가 가지고 진행
 1.2) 클라이언트 인증
  => 서비스가 여러 클라이언트에 의해 사용될때, 클라이언트별 접근 토큰을 발급하여 인증을 강화



반응형