DEV/API & Swagger

REST + API = REST API(RESTful API) 란

땅콩둘기 2024. 10. 17. 22:51
반응형

마지막 면접 떨어지고 현타 와서 쓰는 정리글

RESTful API를 5년이나 개발해 왔는데 면접에서 저게 뭐냐고 물어보니까 정확하게 설명을 못해서

내가 넘 놀라서 정리하려고 후다닥 뛰어왔다.

자 그럼 시작합니다

RESTful API 란 무엇인가?

가장 근본적인 질문

도대체 무엇을 RESTful API라고 부르는가!

REST + API 를 합치면 REST API

풀어서 설명해보면 REST 규격을 맞춘 API가 REST API

그리고 이것을 RESTful API라고 부르게 됩니다.

그렇담 여기서~!

REST는 무엇인가

REST는 영어로 Representational State Transfer

 

말 그대로 번역한다면 대표성 상태 전송

무슨 말인지 모르겄다.

일단 AWS의 말을 빌려보면 REST는 API 작동 방식에 대한 조건을 부과하는 소프트웨어 아키텍처입니다.

... 당연한 소리..~

 

REST는 HTTP 프로토콜을 그대로 활용한 웹의 장점을 살릴 수 있는 아키텍처라고 표현하는 게 더 이해하기 쉽다.

그렇기 때문에 인터넷 브라우징과 동일하게 클라이언트 서버 방식으로 호출해서 사용하게 됩니다.

요것이 바로 REST를 사용하는 이유가 되겠습니다.

왜냐 HTTP 프로토콜을 그대로 사용하면 기존 웹의 보안성을 그대로 사용할 수 있고 통신규약을 맞추기가 편리해지기 때문이죠.

 

HTTP 프로토콜을 사용한다는 뜻

HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD(CREATE, READ, UPDATE, DELETE)를 적용하는 것을 의미하게 됩니다.

 

REST 구성요소 

자원(Resource)인 URI + 행위(Verb)를 나타내는 HTTP Method + 표현(Representation of Resource)

 

URI(Uniform Resource Identifier, 통합자원식별자)

👉 인터넷에 나와있는 자원을 나타내는 유일한 주소

REST에서는 자원을 나타내는 고유한 ID를 지정해야 하고 규칙을 지켜야 합니다.

  1. URI는 동사보다는 명사, 대문자보다는 소문자를 사용해야 합니다
  2. 마지막에 슬래시(/)를 포함하지 않는다.
  3. 언더바 대신 하이픈을 사용한다. (왜냐 안보이니깐)
  4. 파일확장자는 URI에 포함하지 않는다.(ex.jpg, png, txt..)
  5. 행위를 포함하지 않는다.(ex. create, read, update, delete)

이런 규칙을 잘 지켜주는 것이 중요합니다❗️

 

예시)

https://selgii.tistory.com/  뒤로 API를 설계하게 된다면

/manage/dinner/menu -> 저녁메뉴관리 API 호출

이런 식으로 명확하게 명시를 해주는 것이 중요

 

HTTP Method

다음으로는 HTTP Method를 정리해 보겠습니다.

HTTP Method 설명 CRUD
GET 클라이언트는 GET을 사용하여 서버의 지정된 URL에 있는 리소스에 액세스합니다. GET 요청을 캐싱하고 RESTful API 요청에 파라미터를 넣어 전송하여 전송 전에 데이터를 필터링하도록 서버에 지시할 수 있습니다. -> 리소스 조회 READ
POST 클라이언트는 POST를 사용하여 서버에 데이터를 전송합니다. 여기에는 요청과 함께 데이터 표현이 포함됩니다. 동일한 POST 요청을 여러 번 전송하면 동일한 리소스를 여러 번 생성하는 부작용이 있습니다. -> 데이터 전송 후 등록 CREATE
PUT 클라이언트는 PUT을 사용하여 서버의 기존 리소스를 업데이트합니다. POST와 달리, RESTful 웹 서비스에서 동일한 PUT 요청을 여러 번 전송해도 결과는 동일합니다. -> 리소스 수정 UPDATE
DELETE 클라이언트는 DELETE 요청을 사용하여 리소스를 제거합니다. DELETE 요청은 서버 상태를 변경할 수 있습니다. 하지만 사용자에게 적절한 인증이 없으면 요청은 실패합니다. -> 리소스 삭제 DELETE

 

 

그렇다면 우리가 REST API를 만든다면 자원의 CRUD에 맞춰서 HTTP Method를 사용해 주면 됩니다.

 이렇게 Method를 사용하면 뭐가 좋으냐

  • 의도하는 바를 명확하게 나타내므로 상호 이해가 쉬워진다
  • HTTP 표준 프로토콜을 따르는 모든 플랫폼에서 사용할 수 있기 때문에 호환성이 높아진다.
  • 전용선과 같은 별도의 인프라 구축 없이도 호출할 수 있다.

HTTP 프로토콜을 따르기 때문에 나오는 특징

→ 균일한 인터페이스

  • URI로 지정한 Resource에 대한 조작을 통일하고 한정적인 인터페이스로 수행한다.
  • HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능하다

→ 캐시 처리 가능

  • 웹 표준 HTTP 프로토콜을 그대로 사용하므로 캐싱 기능도 그대로 사용할 수 있습니다.
  • 대량의 요청을 효율적으로 처리하기 위해 캐시를 사용할 수 있다.

→ 무상태

  • HTTP프로토콜은 Stateless Protocol이므로 REST로 설계하면 역시 무상태성을 갖는다.
  • 이것은 무슨 뜻이냐 서버가 이전의 모든 요청과 독립적으로 모든 클라이언트 요청을 완료하는 통신 방법을 나타냅니다.
  • 즉, 각 API 서버는 Client의 요청만을 단순 처리하고 이전 요청이 다음요청과 연관되어서는 안 된다.

 

표현(Representation of Resource)

전송할 데이터등을 의미하고 데이터는 보통 JSON, XML를 사용해서 주고받는 것이 일반적입니다.

 

REST API 작동방식

여기까지가 특징이고 작동하는 방식을 한번 볼까요

우선 클라이언트 - 서버 방식으로 작동한다는 것을 전재하에 시작해 보겠습니다.

  1. 클라이언트가 서버에 요청을 전송합니다. 클라이언트가 API 문서에 따라 서버가 이해하는 방식으로 요청 형식을 지정합니다.
  2. 서버가 클라이언트를 인증하고 해당 요청을 수행할 수 있는 권한이 클라이언트에 있는지 확인합니다.
  3. 서버가 요청을 수신하고 내부적으로 처리합니다.
  4. 서버가 클라이언트에 응답을 반환합니다. 응답에는 요청이 성공했는지 여부를 클라이언트에 알려주는 정보가 포함됩니다. 응답에는 클라이언트가 요청한 모든 정보도 포함됩니다.

요런 과정을 거쳐서 작동을 하게 됩니다.

 

인증방식

이 사이에 인증이 있는데 이 인증방식으로는 HTTP 인증방식을 사용하게 됩니다.

클라이언트가 요청하게 될 때 헤더에 사용자 이름, 암호를 넣게 되는데 이것은 암호화를 위해 base64 인코딩을 해서 전달하게 됩니다.

그리고  OAuth인증방식을 사용해서 토큰을 검증해 사용자가 누군지 확인해 안정성을 보장하게 됩니다.

이 OAuth는 따로 포스팅하도록 하겠습니다.

 

서버 응답값

이렇게 인증을 하고 규칙에 맞춰서 API를 호출했다면 서버에서는 해당 데이터의 값과 함께 서버 응답값을 주게 됩니다.

이것도 HTTP의 응답값을 나타내게 되는데

  • 200 : 일반 성공 응답
  • 201 : POST 메서드 성공 응답
  • 400 : 서버가 처리할 수 없는 잘못된 요청
  • 404 : 리소스를 찾을 수 없음(이멀전씨)

요런 응답들을 받을 수가 있습니다. 이 정도 응답은 개발자가 아니어도 응당 알 수 있지요

이렇게 응답까지 받았다면 RESTful API를 만들고 주고받았다고 볼 수 있습니다.

 

그렇담 잠깐 API는 뭘까요

API는 Application Protocol Interface로 애플리케이션이 서로 통신하여 데이터, 특징 및 기능을 교환할 수 있도록 하는 일련의 규칙, 프로토콜을 의미하게 됩니다.

 

그럼 이제 결론

REST는 HTTP 프로토콜을 사용해 HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD(CREATE, READ, UPDATE, DELETE)를 적용하고

API는 애플리케이션이 통신하여 데이터를 교환하는 프로토콜을 의미하므로

REST API를 한 줄 요약하면 HTTP 프로토콜을 사용해서 애플리케이션 간의 통신으로 데이터를 교환하는 것이라고 볼 수 있습니다.

 

 

생각보다 정리하는데 오래 걸리고 마음에 들지도 않지만

언젠가 다시 정리하러 돌아옵니다

앞으로 꾸준히 정리해 보겠습니다

왜냐 내가 멍청하다는 걸 드디어 알아버렸기 때문

 

 

 

출처 : https://aws.amazon.com/ko/what-is/restful-api/

반응형