REST API

simoniful·2021년 7월 12일
0

Wecode

목록 보기
14/14
post-thumbnail

정의

REST(REpresentational State Transfer)란 웹에 존재하는 모든 분산 하이퍼미디어 자원(resorce, ex. 이미지, 동영상, 데이터)에 고유한 URI를 부여하여 정보들을 주고 받음에 있어서 자원에 대한 주소를 지정하는 제약 조건, 규칙입니다.

API(Application Programming Interface)는 프로그램에서 사용할 수 있도록 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스. 쉽게 설명하자면 소프트웨어가 다른 소프트웨어로 부터 지정된 형식으로 요청, 명령을 받을 수 있는 수단(Windows API, Web API 등)

URI(Uniform Resource Identifier) 네트워크 상에서 자원을 구조와 함께 나타내는 구분자(식별자)로 하위 개념으로 URL(Uniform Resource Locator, 웹 주소)가 있습니다.

"프론트엔드에서 백엔드 API를 호출할 url을 어떻게 만들것인가?"
요청이 어떤 동작이나 정보를 위한 것인지를 형식 자체로 추론 가능!

HTTP 규약을 기반으로 data C.R.U.D를 여러 메소드(Get, Delete, Post, Put, Patch)를 활용하여 수행합니다. post, put, patch를 사용할 때는 body 객체를 첨부 활용하여 추가(create)와 수정(update)에 있어서 구체적인 접근이 가능합니다.

👉🏻 RESTful API Guideline

잘못된 예시

fetch(url, {
   method: 'POST', // *GET, POST, PUT, DELETE, etc.
   headers: {
     'Content-Type': 'application/json',
     'Authorization': 'token'
   }
   body: JSON.stringify(obj) 
   // body data type must match "Content-Type" header
})
  1. [GET] url = http://127.0.0.1:8000/product/main_page_product

    • url 은 page 기준이 아닌 resource 기준으로 작성
    • 표출되어야할 정보가 무엇인지 판별하여 url을 결정
    • 여러 종류의 정보를 표출해야 한다면, 프론트엔드 개발자와 협의하여 REST에 맞춰 두 가지 이상의 endpoint를 동시에 호출(여러번 fetch)
      ex. 웹 서비스 메인페이지에 여름특가 이벤트 + 사용자의 내 상세 정보
  2. [GET] url = http://127.0.0.1:8000/store/find_store

    • 동사(find)를 사용하지 않습니다
    • store?district='서울'
  3. [POST] url = http://127.0.0.1:8000/product/add_first_item_information?name='자켓' &category='의류'

    • 자원을 추가(create)할 때는 ~/post 만으로 충분합니다.
  4. [GET] url = http://127.0.0.1:8000/store?name='강남'

    • 검색 기능은 자원의 정보를 호출하는 기능이므로 [GET] method를 사용
    • 검색 키워드는 body를 통해 전달하지 않고, query string을 활용

Query vs Path

Query parameters (GET parameters)

웹 페이지의 url 주소를 자세히 보면 종종 ? 가 포함되어 있는 것을 보셨을 것입니다. 이 물음표는 단순한 문자열이 아닙니다. 특정한 기능을 수행하고 있죠. 물음표 뒤에는 늘 key=value 형식의 문자열이 따라옵니다. 이를 Query parameter 라고 부릅니다.

데이터를 요청시

  • 조건으로 거르거나(filtering)
  • 특정 방식으로 정렬하거나(sorting)
  • 검색(searching)하고자 하는 경우 활용

Path parameters

해당 리소스에 더 자세한 정보를 얻기 위해 접근할 때 사용

용도에 맞는 RESTful 구현

profile
소신있게 정진합니다.

0개의 댓글