Rest API란?

RESTful API는 인터넷을 통한 안전한 정보 교환을 위해 두 컴퓨터 시스템에서 사용하는 인터페이스의 한 유형입니다. 비즈니스 애플리케이션의 경우 내부 및 타사 시스템과의 데이터 교환이 필요한 경우가 많습니다. 예를 들어, 계정 시스템은 월급을 처리하기 위해 고객의 은행 시스템과 협업해야 하고, 송장 발행을 자동화하기 위해 내부 근태 관리 애플리케이션과도 협업해야 합니다. RESTful API는 소프트웨어 시스템 간의 안전하고 신뢰할 수 있으며 효율적인 통신을 위한 표준을 준수하므로 이러한 교환을 가능하게 합니다.

API란?

API는 서로 다른 소프트웨어 시스템과 통신하는 방법을 지정하는 일련의 규정을 말합니다. 프로그래머는 프로그래밍 방식으로 통신해야 하는 다른 애플리케이션의 이점을 위해 API를 개발하고 노출합니다. 예를 들어, 근태 관리 애플리케이션은 직원의 이름과 날짜 범위를 요구하고 해당 기간 동안 근무한 시간을 계산한 후 결과를 반환하는 API를 제공합니다.

웹 API는 클라이언트와 웹 리소스 사이의 인터페이스라고 설명할 수 있습니다. 클라이언트는 웹에서 정보를 얻어야 하는 사용자(사람 또는 소프트웨어 시스템)입니다. 리소스는 애플리케이션이 클라이언트에 제공하는 텍스트, 숫자, 이미지, 동영상 등 다양한 유형의 데이터로 구성됩니다. 서버는 클라이언트에 리소스를 제공하며, API를 통해 조직은 보안, 제어 및 인증을 보장하면서 리소스를 공유하고 웹 서비스를 제공할 수 있습니다.

Rest란?

REST는 API의 작동 방식을 정의하는 소프트웨어 아키텍처입니다. 원래 인터넷과 같은 복잡한 네트워크에서 통신 관리를 안내하기 위해 개발되었습니다. REST 기반 아키텍처는 대규모 고성능 통신을 안정적으로 지원하는 데 적합합니다. 유연하고 쉽게 수정할 수 있어 모든 API 시스템을 크로스 플랫폼에서 사용할 수 있습니다.

API 개발자는 다양한 아키텍처를 활용하여 API를 설계할 수 있습니다. REST API는 REST 아키텍처 스타일을 준수하는 API입니다. REST 아키텍처를 구현하는 웹 서비스를 RESTful 웹 서비스라고 합니다. RESTful API라는 용어는 일반적으로 RESTful 웹 API와 관련이 있지만, REST API와 RESTful API라는 용어는 서로 바꿔서 사용할 수 있습니다.

REST는 웹 서비스 설계를 관장하는 널리 채택된 소프트웨어 아키텍처입니다. 이는 클라이언트와 서버 시스템 간의 안전하고 신뢰할 수 있으며 효율적인 통신을 촉진하는 몇 가지 핵심 원칙을 기반으로 합니다.

RESTful 웹 서비스의 기본 원칙 중 하나는 서버 정보가 표현이라는 것을 사용하여 표준 방식으로 형식화되어야 함을 지정하는 통일된 인터페이스입니다. 이 표현은 서버 애플리케이션에서 리소스의 내부 표현과 다를 수 있습니다. 이러한 제약 조건을 충족하기 위해 REST는 네 가지 아키텍처 제약 조건을 정의합니다. 첫째, 클라이언트 요청은 찾고 있는 리소스를 식별할 수 있어야 합니다. 둘째, 클라이언트는 필요한 경우 리소스를 수정하거나 삭제할 수 있도록 리소스에 대한 메타데이터를 수신해야 합니다. 셋째, 서버는 표현을 추가로 처리하는 방법에 대한 정보를 제공해야 합니다. 마지막으로, 서버는 클라이언트가 더 많은 리소스를 동적으로 검색할 수 있도록 표현에 하이퍼링크를 포함해야 합니다.

REST의 또 다른 핵심 원칙은 상태 비저장성입니다. 즉, 각 클라이언트 요청은 이전 요청과 독립적이며 서버는 사전 컨텍스트 없이도 각 요청을 완벽하게 처리할 수 있습니다. 이러한 설계 제약은 서버가 매번 요청을 이해하고 충족할 수 있도록 보장합니다.

또한 REST는 계층화된 시스템을 지원하므로 클라이언트가 클라이언트와 서버 사이의 승인된 중개자와 상호 작용할 수 있고 서버가 다른 서버에 요청을 전달할 수 있습니다. 이러한 설계를 통해 보안, 애플리케이션, 비즈니스 로직 등 서로 다른 계층을 가진 여러 서버에서 RESTful 웹 서비스를 실행할 수 있으며, 이 서버들은 함께 작동하여 클라이언트 요청을 처리합니다.

캐싱은 RESTful 웹 서비스의 또 다른 중요한 원칙입니다. 캐싱을 사용하면 클라이언트와 중개자가 일부 응답을 저장하여 서버에서 응답을 받는 데 걸리는 시간을 단축할 수 있습니다. RESTful 웹 서비스는 캐싱 가능한 응답과 캐싱 불가능한 API 응답을 사용하여 캐싱을 제어합니다.

마지막으로 REST를 사용하면 서버가 소프트웨어 프로그래밍 코드를 클라이언트에 전송하여 클라이언트 기능을 일시적으로 확장하거나 사용자 지정할 수 있는 코드 온디맨드가 가능합니다. 이 기능은 사용자에게 즉각적인 피드백이 필요한 웹 양식이나 기타 대화형 요소를 만들 때 특히 유용합니다.

RESTful API의 장점

RESTful API는 확장성, 유연성, 독립성 등 다양한 이점을 제공합니다. 상태 비저장 방식의 RESTful API는 효율적인 클라이언트-서버 상호 작용이 가능하므로 확장에 이상적입니다. 또한 RESTful API는 클라이언트-서버 분리를 용이하게 하여 클라이언트에 영향을 주지 않고 서로 다른 서버 구성 요소가 독립적으로 발전할 수 있도록 합니다. 또한 RESTful API는 사용되는 기술에 독립적이므로 개발자는 API의 설계에 영향을 주지 않고 다양한 프로그래밍 언어로 클라이언트 및 서버 애플리케이션을 모두 작성할 수 있습니다.

RESTful API의 기능은 인터넷 검색과 유사합니다. 클라이언트는 리소스가 필요할 때 서버에 연결하고, 서버는 요청을 처리하고 클라이언트를 인증한 후 응답을 반환합니다. REST API 요청 및 응답의 세부 사항은 API 개발자의 설계에 따라 다릅니다.

RESTful API의 동작 방식

RESTful API 클라이언트 요청은 URL과 같은 고유 리소스 식별자, GET, POST, PUT, DELETE와 같은 HTTP 메서드, HTTP 헤더, 데이터, 파라미터 등 다양한 주요 구성 요소로 이루어져 있습니다. GET 요청을 통해 클라이언트는 지정된 URL의 리소스에 액세스할 수 있으며, POST 요청을 통해 데이터를 서버로 전송할 수 있습니다. PUT 요청은 기존 리소스를 업데이트하는 데 사용되며 DELETE 요청은 리소스를 제거합니다. 요청 헤더는 클라이언트와 서버 간에 교환되는 메타데이터를 제공하며, 매개변수는 서버에 수행할 작업에 대한 추가 정보를 제공합니다. 경로 매개변수는 URL 세부 정보를 지정하고, 쿼리 매개변수는 추가 리소스 정보를 요청하며, 쿠키 매개변수는 클라이언트를 인증합니다.

RESTful API의 인증

RESTful API의 경우 인증은 응답을 전송하기 전에 완료해야 하는 중요한 프로세스입니다. 인증은 클라이언트의 신원을 확인하여 서버와의 신뢰를 구축합니다. RESTful API에 사용할 수 있는 인증 방법에는 여러 가지가 있으며, 각 인증 방법에는 고유한 장단점이 있습니다.

일반적인 인증 방법 중 하나는 기본 및 무기명 등 사전 정의된 인증 체계를 활용하는 HTTP 인증입니다. 기본 인증은 클라이언트가 요청 헤더에 base64로 인코딩된 사용자 이름과 비밀번호를 전송하는 방식이며, 무기명 인증은 클라이언트가 로그인 요청에 대한 응답으로 서버에서 생성한 암호화된 문자열 또는 무기명 토큰을 제공하는 방식입니다.

또 다른 인증 방법은 서버가 각 클라이언트에 고유한 값을 할당하여 이후 요청 시 클라이언트의 신원을 확인하는 데 사용하는 API 키를 사용하는 것입니다. 하지만 API 키는 클라이언트가 키를 전송해야 하기 때문에 보안성이 떨어지고 네트워크 도용에 취약할 수 있습니다.

OAuth는 비밀번호와 토큰을 결합하여 시스템에 대한 로그인 액세스를 승인하는 매우 안전한 인증 방법입니다. 서버는 인증 프로세스를 완료하기 위해 비밀번호와 토큰을 요청하며, 이는 특정 범위와 수명으로 확인할 수 있습니다.

RESTful API의 서버 응답

REST 원칙에 따라 서버 응답에는 몇 가지 주요 구성 요소가 포함되어야 합니다. 상태 표시줄에는 요청의 성공 또는 실패를 나타내는 3자리 상태 코드가 포함되며, 2XX 코드는 성공을 나타내고 4XX 및 5XX 코드는 오류를 나타냅니다. 응답 본문에는 리소스 표현이 포함되며, 서버는 요청 헤더에 따라 적절한 형식을 선택합니다. 응답에는 서버 정보, 인코딩, 날짜, 콘텐츠 유형 등 응답에 대한 추가 컨텍스트와 메타데이터를 제공하는 헤더도 포함됩니다.