[Section2] 네트워크 - HTTP / 20230523

2023. 5. 24. 00:08

🧑🏻‍💻 TIL(Today I Learned)


✔️ Rest API

 

💡 REST API

➡️ REST(Representational State Transfer)의 줄임말 

➡️ 웹에서 사용되는 데이터나 자원(Resource)을 HTTP URI로 표현하고 HTTP 프로토콜을 통해 요청과 응답을 정의하는 방식

 

🔎 좋은 Rest API 디자인 하는 법 

REST 성숙도 모델

  • 모든 단계를 충족해야 REST API라고 부를 수 있다고 주장하기도 하나 실제로 3단계까지 지키기 어렵기 때문에 2단계까지만 적용해도 좋은 API 디자인이라고 볼 수 있음 → HTTP API 라고 부름

 

REST 성숙도 모델 - 0단계

➡️ 0단계에서는 단순히  HTTP 프로토콜을 사용하기만 해도 됨, 이 경우는 해당 API를 당연히 REST API 라고 부를 수 없음, 기본 단계

 

REST 성숙도 모델 - 1단계

➡️ 1단계에서는 개별 리소스와 통신을 준수해야 함 

➡️ REST API는 웹에서 사용하는 모든 데이터나 자원을 HTTP URI로 표현하기 때문에 모든 자원은 개별 리소스에 맞는 엔드 포인트(end point)를 사용해야 한다는 것과 요청하고 받은 자원에 대한 정보를 응답으로 전달해야 한다는 것

엔드 포인트(End Point)?
: 서비스를 사용 가능하도록 서비스에서 제공하는 커뮤니케이션 채널의 한쪽 끝
   즉 요청을 받아 응답을 제공하는 서비스를 사용할 수 있는 지점을 의미
   API가 서버에서 리소스에 접근할 수 있도록 가능하게 하는 URL

➡️ 어떤 리소스를 변화시키는지 혹은 어떤 응답이 제공되는지에 따라 각기 다른 엔드포인트를 사용하기 때문에 적절한 엔드 포인트를 작성하는 것이 중요! 

➡️ 엔드 포인트 작성 시에는 동사, HTTP 메서드, 어떤 행위에 대한 단어 사용은 지양하고 리소스에 집중해 명사 형태의 단어로 작성하는 것이 좋음

➡️ 요청에 따른 응답으로 리소스를 전달할 때에도 사용한 리소스에 대한 정보와 함께 리소스 사용에 대한 성공/ 실패 여부를 반환해야 함 

 

REST 성숙도 모델 - 2단계

➡️ CRUD에 맞게 적절한 HTTP 메서드를 사용하는 것에 중점

➡️ 만약 병원을 예약한다고 할 때 예약 가능한 시간을 확인한다는 것은 조회(READ) :  GET 메서드 사용하여 요청 

    특정시간에 예약한다는 것은 예약을 생성(CREATE) : POST 메서드 사용하여 요청 

➡️ 생성하는 경우 응답은 새롭게 생성된 리소스를 보내주기 때문에 응답 코드도 201 Created로 명확하게 작성해야 하며 관련 리소스를 클라이언트가 Location 헤더에 작성된 URI를 통해 확인할 수 있도록 해야만 2단계를 충족한 것이라고 할 수 있음 

메서드 사용할 때의 규칙
1. GET 메서드의 경우 서버의 데이터를 변화시키지 않는 요청에 사용해야 함 
2. POST는 요청마다 새로운 리소스를 생성하고 PUT은 요청마다 같은 리소스 반환
    → 매 요청마다 같은 리소스 반환하는 특징 : 멱등성(idempotent)
    → 멱등성을 가지는 메서드 PUT 과 그렇지 않은 POST 는 구분해서 사용해야 함 
3. PUT 과 PATCH도 구분하여 사용해야 함
    → PUT은 교체, PATCH는 수정의 용도로 사용 

 

REST 성숙도 모델 - 3단계

➡️ HATEOAS(Hypertext As The Engine Of Application State)라는 약어로 표현되는 하이퍼미디어 컨트롤 적용

➡️ 3단계의 요청은 2단계와 동일하지만 응답에는 리소스의 URI를 포함한 링크 요소를 삽입하여 작성한다는 것이 다름

➡️ 응답에 들어가는 링크 요소는 응답을 받은 다음에 할 수 있는 다양한 액션들을 위해 많은 하이퍼미디어 컨트롤 포함하고 있음
➡️ 예를 들어 예약 가능 시간을 확인한 후에 예약을 할 수 있는 링크 삽입이라거나 특정 시간에 예약을 완료하고 나서 그 예약을 다시 확인할 수 있도록 링크를 작성해 넣는 것 등 

 

 

💡 Open API 와 API Key

🔎 Open API

➡️ 정부에서 제공하는  API의 경우 Open API 형태로 공공데이터를 제공함, 말 그대로 누구에게나 열려있는 API이나 "무제한으로 이용할 수 있다" 는 의미는 아님 

➡️ 각 기관이나 API마다 정해진 이용 수칙이 있고 그 이용 수칙에 따라 제한사항이 있을 수 있음 

 

🔎 API Key

➡️ API를 이용하기 위해서는 API Key가 필요함 

➡️ 클라이언트의 요청에 따라 서버에서 응답한다는 말은 결국 서버를 운용하는 데 비용이 발생한다는 것, 그래서 아무 조건 없이 익명의 클라이언트에게 데이터를 제공할 의무도 이유도 없음 

➡️ 로그인된 이용자에게만 자원에 접근할 수 있는 권한을 API Key 형태로 제공하고 데이터를 요청할 때 API Key를 같이 전달해야만 원하는 응답을 받을 수 있음 

BELATED ARTICLES

more