REST API와 HTTP Header
REST API
REST(REpresentational State Transfer)의 약어로,
인터넷을 통해 통신할 수 있게 하는 인터페이스입니다.
조금 더 자세히 설명하면,
REST API는 HTTP URI를 통해 제어할 자원(Resource)을 명시하고, HTTP Method(GET, POST, PUT, DELETE)을 통해 해당 자원을 제어하는 명령을 내리는 방식의 아키텍처입니다.
위 아키텍처 방법을 통해 전송하는 것이 REST API 입니다.
💡 REST API는 TCP/IP 프토로콜의 5계층인 응용 계층에 해당됩니다.
REST API의 요청과 응답은 Header와 Body 부분이 있습니다.
HTTP Header
Header는 요청과 응답에 대한 전반적인 정보를 담고 있습니다.
HTTP 1.1 버전의 경우 아래와 같이 세 가지 헤더로 구분할 수 있습니다.
HTTP 요청(request)에 포함되는 세 가지 Header는 아래와 같습니다.
Request Line
Header는 아닙니다.
하지만, REST 요청의 Method(POST) 및 URI(/api/create-user)의 일부분을 포함하고 있습니다.
또, HTTP 버전을 포함하고 있습니다.
Request Header
호스트(Host) 정보를 지정해, 서버가 어떤 도메인에 대한 요청을 처리해야 하는지 나타냅니다.
클라이언트의 사용자 에이전트 정보(User-Agent)를 제공해, 웹 서버는 이 정보로 최적화할 수 있습니다.
또, 쿠키(Cookie) 정보를 포함해 서버로 데이터를 전송할 수 있습니다.
이 외에도 인증 정보(Authorization), 언어 수락(Accept-Language) 등이 이 헤더에 포함됩니다.
General Header
캐시 동작(Cache-Control)을 나타냅니다. no-cache는 캐싱을 금지합니다.
연결 관리(Connection)를 지정합니다. keep-alive는 지속적인 연결을 나타내어, 동일한 연결을 여러 요청 및 응답에 재사용할 수 있게 합니다.
Entity Header
Body의 타입(Content-Type), 길이(Content-Length) 등의 Body 정보를 나타냅니다.
REST GET 요청의 경우 Body가 없어 Entity Header가 없습니다.
장점
REST API와 대조적으로 Socket 통신이 있을 수 있습니다.
두 가지의 차이점은 아래와 같습니다.
REST API | Socket | |
프로토콜 | HTTP | TCP/IP |
통신 방식 | 비연결(요청-응답 모델) | 연결 지향 |
상태 정보 | 클라이언트와 서버는 서로의 상태를 모름 | 클라이언트와 서버는 서로의 상태 정보 유지 가능 |
사용 사례 | 웹 서비스 | 실시간 채팅, 온라인 게임 |
REST API는 매 요청마다 서버와 연결합니다.
즉,
클랑이언트는 매 요청마다 3-handshake로 연결하고,
응답하고 나서 4-handshake 연결을 해제한다는 의미입니다.
매 요청마다 연결을 하고 해지해야 하는데도 불구하고 Socket에 비해 REST API가 가지는 장점은 아래와 같습니다.
- 단순성 및 이식성:
- REST API는 HTTP 프로토콜을 사용하므로 웹 브라우저, 모바일 앱, 서버 간의 통신을 표준적인 방식으로 처리할 수 있습니다. 이는 RESTful 서비스를 구현하고 사용하기 쉽게 만듭니다.
- 확장성:
- REST API는 HTTP 메서드(GET, POST, PUT, DELETE 등)를 사용하여 CRUD(Create, Read, Update, Delete) 작업을 수행하며, 이를 통해 다양한 리소스를 조작하고 확장할 수 있습니다.
- 상태 정보의 무결성:
- REST API는 각 요청이 독립적이기 때문에 클라이언트와 서버 간의 상태 정보를 관리할 필요가 없습니다. 이로 인해 무결성을 유지하는 데 더 간단하고 예측 가능한 방식으로 데이터를 조작할 수 있습니다.
- 보안:
- REST API는 보안 기능을 쉽게 구현할 수 있으며, HTTPS를 사용하여 데이터를 암호화하고 인증을 보장할 수 있습니다. 소켓 통신도 보안을 제공할 수 있지만, REST API는 웹 애플리케이션에서 표준적으로 사용되는 기술로서 강력한 보안 도구와 라이브러리를 활용할 수 있습니다.
- 네트워크 프록시 및 로드 밸런싱:
- REST API는 HTTP를 기반으로 하므로 네트워크 프록시 및 로드 밸런싱을 쉽게 설정하고 관리할 수 있습니다. 이는 대규모 애플리케이션에서 성능과 안정성을 유지하는 데 도움이 됩니다.
- 캐싱:
- REST API는 HTTP의 표준 캐싱 메커니즘을 활용하여 응답을 캐싱할 수 있으므로, 동일한 요청에 대한 응답을 더 빠르게 반환할 수 있습니다.
- 문서화:
- REST API는 자체 문서화가 쉽습니다. API 엔드포인트, 지원하는 메서드, 요청 및 응답 형식을 명시적으로 정의하고 문서화할 수 있습니다. 이를 통해 개발자들이 API를 쉽게 이해하고 사용할 수 있습니다.
- 대중적 지원:
- REST API는 웹 기술의 일부로서 매우 널리 사용되며, 다양한 프로그래밍 언어와 플랫폼에서 지원됩니다. 따라서 다양한 클라이언트와 서버 간의 통신이 가능합니다.
소켓 통신은 특정 사용 사례나 상황에서 필요할 수 있지만, REST API는 대부분의 웹 및 분산 애플리케이션에서 쉽게 사용할 수 있는 표준적인 방법을 제공합니다.