API(Application Programming Interface)
API에서 Interface란 서로 다른 2개의 시스템 사이에서 정보를 주고 받는 경계면이다.
사용자는 API를 통해 서버에 요청을 하게 되고,
서버는 필요에 따라 데이터베이스와 상호작용해
필요 데이터를 다시 클라이언트에게 응답을 하게 된다.
이러한 API 요청은 HTTP요청방식으로 이루어진다.

백엔드 개발자는 클라이언트에게 요청에 알맞는 리소스를 빠르고 에러 없이 제공해야한다.
요청을 받기 위해서는 요청이 들어올 문이 있어야 한다.
이 문이 바로 인터페이스인 API 이다.
API는 URI로 나타낸다.
또한, 요청의 목적지를 엔드포인트라고 부르며,
엔드포인트는 주로 Path+Parameter로 구성된다.
아래 기능이 있는 회원 정보 관리 API를 만들어보자.
- 회원 목록 조회
- 회원 조회
- 회원 등록
- 회원 수정
- 회원 삭제
API를 설계할 때는 각 요청마다 모두 문을 만들어 주어야 한다.

그러면 위와 같이 URI를 5개 만들면 되는건가?
URI는 Uniform Rescource Identifier이다.
조회, 등록, 수정, 삭제가 리소스일까?
아니다. 리소스는 회원이다.

위와 같이 만들어주면 된다.
위에서 각 요청 마다 다 다른 문을 만들어주어야 한다고 하였는데..
/members/{id}를 어떻게 구분할까? 라는 생각이 들 것 이다.
그래서 우리는 리소스를 구분하는 URI와 행위를 구분하는 HTTP 메서드로 분리한다.
HTTP 메서드
- GET: 리소스 조회
- POST: 요청 데이터 처리, 주로 등록에 사용
- PUT: 리소스 대체, 해당 리소스가 없으면 생성
- PATCH: 리소스 부분 변경
- DELETE: 리소스 삭제
GET
리소스를 조회할 때 사용되며, 서버에 전달하고 싶은 데이터를 query를 통해 전달한다.
id가 100인 회원의 정보를 가져온다고 하자.

서버는 요청에 맞게 회원정보를 HTTP 메세지에 담아 클라이언트에게 보낸다.

POST
요청 데이터 처리, 주로 등록에 사용된다.
메세지 바디를 통해 서버로 요청 데이터를 전달한다.
새로운 member를 등록하는 요청을 생각해보자.

서버는 요청을 받고 해당 데이터에 맞게 새로운 멤버를 id=100으로 할당한 뒤,
잘 등록되었다고 응답을 보내주게 된다.

POST ↔ GET
POST과 GET의 차이는 새로운 데이터를 생성하느냐, 기존 데이터를 조회하느냐의 차이를 가지는 것이 아닌
HTTP요청에서 body를 가지고 있는냐 아니냐에 가깝다.
특정 데이터를 body에 담아 해당 데이터에 맞는 리소스를 요청하는 경우에는 POST를 쓰기도 한다.
그럼 조회할 때 데이터를 같이 넘기면 무조건 POST냐 그것 또한 아니다.
간단한 정보의 경우 GET을 사용해 parameter로 넘길 수도 있다.
보안에 예민한 정보나 정보의 양이 많을 경우 POST를 사용한다.
PUT
리소스 대체, 해당 리소스가 없으면 생성할 때 사용된다.
주의) 대체될 시, 부분 변경이 아닌 리소스를 완전히 대체한다.




PATCH
리소스 부분 변경할 때 사용된다.


DELETE
리소스 삭제할 때 사용된다.


HTTP 메서드 활용
클라이언트에서 서버로 데이터를 전송할 때 전달 방식은 크게 2가지이다.
1. 쿼리 파라미터를 통한 데이터 전송
2. 메세지 바디를 통한 데이터 전송
클라이언트에서 서버로 데이터를 전송하는 상황은 크게 4가지이다.
1. 정적 데이터 조회
정적데이터= 이미지, 정적 텍스트 문서
쿼리파라미터 없이 리소스 경로로 단순하게 조회 가능(GET)
2. 동적 데이터 조회
주로 검색, 게시판 목록에서 정렬 필터
쿼리 파라미터 사용(GET)
3. HTML Form을 통한 데이터 전송
form이 자동적으로 HTTP 메세지를 만들어 전송
(POST, GET)
4. HTTP API를 통한 데이터 전송
js로 직접 HTTP 메세지를 만들어 보내는 방식
(모든 HTTP 메서드 사용 가능)
