REST API 안티 패턴

수정이·2022년 12월 2일
0

Etc

목록 보기
4/5
post-thumbnail

안티 패턴이란?

디자인 패턴이란 일반적인 소프트웨어 개발 문제를 해결하는데 사용되는 솔루션이다.
반면에 안티패턴이란 소프트웨어 개발의 나쁜 습관으로 알려져있다. 성능, 디버깅, 유지보수, 가독성 측면에서 부정적인 영향을 줄 수 있어 지양하는 패턴이다.


REST API 안티 패턴

GET, POST HTTP 터널링

HTTP 터널링이란 동작과 맞지 않는 메소드를 사용하거나 모든 동작에 하나의 HTTP 메소드를 사용하는 것을 말한다.
예를 들면, 회원가입을 할 때는 POST을 사용해야 하지만 GET를 사용하는 것을 터널링이라 말한다.

# GET으로 회원가입
GET /users?method=join&name=test&password=test1234

이것이 왜 문제라는 걸까?

  1. 자원이 URI에 표현되지 않는다. URI에 표현이 되지않고, 쿼리 파라미터에 자원이 설명되기 때문에 문제가 된다. 쿼리 파라미터에 메소드의 설명이 불필요하게 있고, 특히 위의 예시처럼 회원가입을 하게 되면 사용자의 정보가 노출되기 때문에 문제가 된다.

  2. HTTP 메소드가 실제 동작과 일치하지 않는다.

URI에 행위(method)를 표현

REST API는 URI를 명사로만 표현한다. HTTP method를 통해 API의 행동(조회, 생성, 수정, 삭제)을 알려주기 때문에 URI에 중복해서 표현할 필요가 없다.

캐시 무시

RESTful API에서 중요한 이점은 캐시기능이다.
HTTP에서 캐시라는 것은 동일한 페이지 또는 동일한 요청이 있을 때, 서버에 파일을 요청하는 것이 아니라, 이전에 같은 요청을 한 정보를 보여줌으로써 적은 자원을 이용하여 더 빠르고 효율적으로 처리할 수 있는 것이다.
HTTP Header의 Cache-control 헤더를 사용하여 캐시를 사용할 수 있다.

하이퍼미디어 무시

Hypermedia As The Engine Of Application State의 줄임말인 HATEOAS는 하이퍼미디어의 특징을 활용하여 HTTP Response에 현재 API에 관련되어 있는 다른 동작들에 대한 URI를 같이 제공하는 것을 의미한다.

다음과 같이 사용한다.

GET /members
HTTP 200
{
	"members" : [
      {
      	"name" : "lee"
      },
      {
      	"name" : "park"
      }
    ],
  	"links" : [
      {
      	"rel" : "self",
        "href" : "http://localhost/members",
        "method" : "GET"
      },
      {
      	"rel" : "create_member",
        "href" : "http://localhost/members",
        "method" : "POST"
      }
    ]
}

MIME 타입 무시

HTTP는 요청을 보내고 응답을 받을 때, 원하는 컨텐츠의 형식을 사전에 정할 수 있다.(Content-Type) 가장 많이 사용하는 컨텐츠 타입은 Json, XML, yaml등이 있다. 컨텐츠 타입이 한 개나 두 개가 아니기때문에, MIME타입을 설정하지 않으면 클라이언트가 어떤 타입으로 데이터를 파싱해야하는 지 모르는 상황이 발생한다.

자기 표현 구조를 무시

자기 표현 구조는 API 표현 자체가 쉽고 직관적이여서 API만 읽고도 어떤 API인지 알 수 있는 구조를 말한다. HATEOAS를 지키지 않거나, HTTP Header에 정보들이 부족한 경우가 있다.


참고

API academy
키위남

profile
공부는 꾸준히... 글쓰기도 꾸준히...

0개의 댓글