REST API

Bien·2022년 2월 18일
0

REST API에 대해

많이 들어봤지만 들을 때마다 걔가...그건가...? 하는 REST API에 대해 정리해보려고 한다. REST API는 정보들이 주고 받아지는 데 있어서 개발자들 사이에 널리 쓰이는 일종의 형식을 의미한다.

API는 뭘까?

어떤 기계가 있으면 사용자가 그 기계를 활용할 수 있도록 제어장치를 만든다. 예를들어 TV와 리모컨의 관계가 그렇다. 이런 기계와 인간 간의 소통을 돕기 위해 만든 것을 인터페이스(interface)라고 한다.

인터페이스처럼 기계와 기계, 소프트웨어와 소프트웨어의 사이에서도 수많은 정보 요청과 교환이 이루어지고 있다. 이처럼 소프트웨어가 다른 소프트웨어로부터 지정된 형식으로 요청, 명령을 받을 수 있는 수단을 API(Application Programming Interface)라고 한다.

그렇다면 REST API는 뭘까?

요즘 많이 사용하는 배달앱에서 서버에 주문을 넣는 등 이런 서비스들에서 많이 사용되는 것이 바로 REST라는 형식의 API이다. REST API의 가장 큰 특징은 각 요청이 어떤 동작이나 정보를 요구하는지 그 요청의 모습 자체로 추론 가능하다는 것이다. REST API는 요청을 보낸 주소만으로 대략 뭘 하는 요청인지 파악이 가능해진다.

REST API란, HTTP 요청을 보낼 때 어떤 URI에 어떤 메소드를 사용할지 개발자들 사이에 널리 지켜지는 약속이다.

HTTP 규약과 REST API

서버에 REST API로 요청을 보낼 때는 HTTP(HyperText Transfer Protocol) 규약에 따라 신호를 전송한다. HTTP로 요청을 보낼 때도 여러 메소드가 있다. REST API서는 크게 4개 혹은 5개의 메소드를 사용한다.

  • GET : 데이터를 Read. 조회하는데 사용한다.
  • POST : Create. 즉, 새로운 정보를 body에 실어보내 정보를 추가하는데 사용한다.
  • DELETE : 정보를 삭제할 때 사용한다.
  • PUT : 변경, 업데이트 될 새 정보를 Body에 실어보낸다. Put은 정보를 통으로 바꿀때 사용한다.
  • PATCH : 변경, 업데이트 될 새 정보를 Body에 실어보낸다. Patch는 정보 중 일부를 특정 방식으로 변경할 때 사용한다.
    여기서 POST PUT PATCH는 BODY에 정보를 GET과 DELETE와 달리 많이, 비교적 안전하게 감춰서 보낼 수 있다.

좋은 REST API 설계

  • URI는 정보의 자원을 포함한다.
  • 자원에 대한 행위는 HTTP Method로 표현한다.

1. 동사는 사용하지 않는다.

아래는 좋지 않은 예시이다.

http://restapi.example.com/createrecipes
http://restapi.example.com/updaterecipes/Kimchi

여기서 create, update는 삭제하고 명사만 가지는게 좋다. 여기서 복수형을 사용한 recipes는 컬렉션 kimchi는 DB에서 고유 식별자(unique identifier)가 된다.

2. HTTP method를 활용한다.

위에서 설명했듯 get을 통해 정보를 읽어오고, post를 통해 정보를 생성하고, put을 통해 수정하고 delete를 통해 삭제한다.

/recipes로 GET요청을 보내면 레시피의 리스트를 가져온다. 
http://restapi.example.com/recipes
/recipes로 POST요청을 보내면 레시피를 생성한다. 
http://restapi.example.com/recipes
/recipes/kimchi 로 get 요청을 보내면 김치레시피에 대한 상세 정보를 얻는다.
http://restapi.example.com/recipes/kimchi
/recipes/kimchi 로 PUT/DELETE 요청을 보내면 해당 정보를 편집하거나 삭제한다. 
http://restapi.example.com/recipes/kimchi

면접에서 많이 물어보는 내용이라 조금 더 공부하고 정리할예정.
RestFul api design guidelines 등 조금 더 찾아볼 것-> 모르겠소. 다시 정리 예정.....ㅎ

profile
🙀

0개의 댓글