RESTful API?
REST란 Representational State Transfer의 약자로,REST는 HTTP를 기반으로 구현되는 네트워크 상에서 서로 다른 시스템 간의 상호 운용성을 보장하기 위한 아키텍쳐 스타일입니다. RESTful API는 이러한 REST 아키텍처 스타일을 따르는 API입니다. RESTful API는 HTTP 메서드를 사용하여 데이터를 생성(POST), 조회(GET), 수정(PUT), 삭제(DELETE)하는 등의 작업을 수행합니다.
RESTful API의 조건
- 클라이언트-서버 구조: RESTful API에서는 클라이언트와 서버가 각각 독립적으로 발전할 수 있도록 설계됩니다.
- 상태 없음(Stateless): RESTful API는 요청과 응답에 대한 상태 정보를 갖지 않습니다. 이를 통해 서버의 확장성을 높일 수 있습니다.
- 캐시 가능(Cacheable): RESTful API는 캐싱 기능을 지원하여 성능을 최적화할 수 있습니다.
- 계층화(Layered System): RESTful API는 클라이언트와 서버 간의 중간 계층을 두어 확장성과 보안성을 높일 수 있습니다.
- 인터페이스 일관성: RESTful API는 URI를 통해 자원을 식별하고, HTTP 메서드를 이용하여 자원에 대한 작업을 수행합니다. 이를 통해 일관된 인터페이스를 제공합니다.
- 자기 서술적(Self-descriptive): RESTful API는 자원에 대한 정보를 포함하고 있으므로, 메시지만으로도 어떤 작업을 수행하는지 파악할 수 있습니다.
위의 조건을 모두 만족할 때 RESTful 하다고 할 수 있다.
RESTful API 장점
- 상호 운용성: RESTful API는 HTTP를 기반으로 구현되어 있기 때문에, 서로 다른 시스템 간의 상호 운용성이 보장됩니다.
- 캐시 기능: RESTful API는 HTTP를 기반으로 구현되어 있기 때문에, HTTP의 캐싱 기능을 사용할 수 있습니다. 이를 통해 서버의 부하를 줄일 수 있으며, 클라이언트 측에서도 빠른 응답을 받을 수 있습니다.
- 유연성: RESTful API는 HTTP를 기반으로 구현되어 있기 때문에, 다양한 클라이언트와 서버에서 이를 사용할 수 있습니다. 또한, RESTful API는 URI를 사용하여 자원을 식별하기 때문에, 자원의 상태를 변경하기 위한 일관된 방법을 제공합니다.
- 보안성: RESTful API는 HTTP에 기반하여 작성되기 때문에, HTTPS와 같은 보안 기능을 사용하여 데이터를 보호할 수 있습니다.
RESTful API 단점
- 불필요한 데이터 전송: RESTful API에서는 URI를 사용하여 자원을 식별하기 때문에, 클라이언트는 전체 자원의 일부만 필요한 경우에도 전체 자원을 요청하게 됩니다. 따라서 불필요한 데이터 전송이 발생할 수 있습니다.
- 제한된 표현성: RESTful API에서는 HTTP 메서드를 사용하여 자원에 대한 작업을 수행합니다. 이는 CRUD(Create, Retrieve, Update, Delete) 작업을 수행하는 데에는 적합하지만, 더 복잡한 작업을 수행할 때는 제한이 될 수 있습니다.
- 서버 부하: RESTful API에서는 클라이언트가 자원에 대한 URI를 알고 있어야 합니다. 이를 통해 서버의 부하가 증가할 수 있으며, 클라이언트 측에서도 URI를 알고 있어야 하는 불편함이 있습니다.
- 보안성: HTTP를 사용하게 되면 보안성에 대한 문제가 발생할 수 있습니다. 이를 해결하기 위해서는 HTTPS로 보안을 업그레이드 해야합니다.
추가) GraphQL
GraphQL?
GraphQL은 Facebook에서 개발한 쿼리 언어로, RESTful API의 대안으로 제안되었습니다. RESTful API는 클라이언트와 서버 간의 통신에서 자원의 URI를 사용하여 자원을 식별하고, HTTP 메서드를 사용하여 해당 자원에 대한 작업을 수행합니다. 반면에 GraphQL은 쿼리 언어를 사용하여 클라이언트가 필요한 데이터만 요청할 수 있도록 합니다.
GraphQL에서는 클라이언트가 필요한 데이터를 직접 지정할 수 있습니다. 이를 위해서는 스키마를 먼저 정의해야 합니다. 스키마는 데이터의 형식과 관계를 정의하는 언어로, GraphQL에서는 스키마를 정의함으로써 API의 인터페이스를 정의할 수 있습니다. 스키마를 정의한 후에는, 클라이언트는 쿼리를 작성하여 서버에 요청할 수 있습니다.