
= Aplication Programing Interface
즉, 다른 시스템과 상호작용하는 데 필요한 인터페이스이다.
ex)
근무시간 기록 어플리케이션 - 직원의 전체 이름, 날짜 범위 요청 API표시
이러면 이 정보를 받아 내부적으로 직원의 근무 시간 기록을 처리하고 해당 날짜 범위에서 근무한 시간을 반환하는 식

인터넷의 작동은 기본적으로 서버와 클라이언트가 요청과 응답을 주고받는 행위이다.
이 요청을 어떤식으로 하고, 응답을 어떤식으로 할지에 대한 것이 API!
= Representational State Transfer
API 작동 방식에 대한 조건을 부과하는 소프트웨어 아키텍처
원래는 복잡한 네트워크 상에서 통신을 관리하기 위한 지침으로 반들어진 것
실제로 서버가 HTTP의 GET, POST, PUT, DELETE 등의 다양한 메서드의 기본 설명을 따르지 않아도 프로그램을 개발할 수 있음 -> 그렇기 때문에 기준, 지침이 필요했던 것
REST는 각 자원(Resource)에 대해 자원의 상태에 대한 정보를 주고받는 방식
대규모의 고성능 통신을 안정적으로 지원할 수 있음
쉽게 구현하고 수정 가능
소프트웨어 아키텍처는 여러가지가 있고, 개발자는 여러 아키텍처를 이용해 API를 설계할 수 있다. REST 아키텍처 스타일을 따르는 API를 REST API라고 함
REST API를 구현하는 시스템은 REST가 클라이언트-서버 상호 작용을 최적화하기 때문에 크기 조정을 효율적으로 할 수 있다. 서버가 클라이언트의 상태를 관리하지 않는 무상태성을 가지고 있기 때문에 서버와 클라이언트 각각의 인터페이스가 명확하여 서로간의 의존성이 낮고, 이런 특징들 때문에 확장이 용이하다는 장점이 있다.
위의 확장성과 마찬가지로 RESTful API가 완전한 클라이언트-서버 분리를 지원하기 때문에 각 부분이 독립적으로 발전할 수 있다. 그렇게 되면 여러 변화에 유연하다. 예를 들면 서버 어플리케이션의 기술 변경이 클라이언트 어플리케이션에 영향을 주지 않아 어플리케이션 로직을 다시 작성하지 않고도 데이터베이스 계층을 변경할 수 있다.
HTTP프로토콜을 이용하기 때문에 기존 웹 인프라를 그대로 이용한다는 점에서 인터페이스가 일관성있게 디자인될 수 있으며 재사용이 용이하다는 장점이 있다.
클라이언트와 서버가 독립적이고 플랫폼에 독립적이고 여러 제약 조건을 모두 따르는 API이기 때문에 상대적으로 보안성이 높다.
REST의 설계 규칙을 잘 지켜서 설계된 API가 RESTful API인데, 이렇게 만들어진 API는 요청을 보내는 주소만으로도 어떤 것을 요청하는지 파악이 될 정도로 직관적이다. 각 요청이 어떤 동작이나 정보를 위한 것인지 요청 자체로 추론이 가능해 다양한 클라이언트에서 쉽게 이해하고 사용이 가능하다는 장점이 있다.
아래 글이 상세하게 정리되어있어 참고해 설계하면 RESTful API를 적용할 수 있을 것 같다.
https://meetup.nhncloud.com/posts/92
AWS에서 정리해놓은 RESTful API 글도 참고해 읽어보면 좋다.
https://aws.amazon.com/ko/what-is/restful-api/
(+)
REST API를 연습해볼 수 있는 방법 : json-server를 이용
json server 설치
VSCODE를 이용해 JSON SERVER를 설치
VSCODE의 터미널에서npm install -g json-server@0.17.4를 입력해서 설치하면 된다.
-g는 전역에 설치하는 방법인데 지역에 설치하는 것을 권장하는 분들도 있으니 참고해 설치하기.
@0.17.4는 json-server의 버전json server 작동시키기
터미널에json-server --watch db.json를 입력해주고 아래와같이 뜬다면 연결 성공이다.
(+)
REST API와 fetch를 이용해 토이프로젝트를 진행한 나의 글
https://velog.io/@rabyeoljji/TO-DO-LIST-토이프로젝트