REST + API ?
API란?
Application Programming Interface의 약자입니다.
API는 정의 및 프로토콜 집합을 사용하여 두 소프트웨어 구성 요소가 서로 통신할 수 있게 하는 메커니즘입니다.
컴퓨터와 인간을 연결시키는 사용자 인터페이스(UI)와 반대로, API는 컴퓨터나 소프트웨어를 서로 연결한다.
REST란?
로이 필딩(Roy Fielding)의 2000년 박사학위 논문에서 소개
Representational State Transfer의 약자인 REST는 API 작동 방식에 대한 조건을 제시하는 소프트웨어 아키텍쳐입니다.
쉽게 말하자면 기계와 기계가 웹을 이용하여 통신을 할때 정해진 통신 규칙입니다. 인터넷과 같은 복잡한 네트워크에서 통신을 관리하기 위한 지침으로 만들어졌습니다.
뭐가 좋을까?
- 대규모의 고성능 통신을 안정적으로 지원할 수 있다.
- 쉽게 구현, 수정이 가능해서 모든 API 시스템을 파악하고 여러 플랫폼에서 사용할 수 있다.
듣기에는 좋아보이는데 이 아키텍처는 어떤 아키텍쳐 스타일 원칙을 가지고 있을까요?
- 균일한 인터페이스
- 요청이 어디에서 오는지와 무관하게, 동일한 리소스에 대한 모든 API 요청은 동일하게 보여야 합니다.
- 형식은 서버 애플리케이션에 있는 리소스의 내부 표현과 다를 수 있습니다. 예를 들어, 서버는 데이터를 텍스트로 저장하되, HTML 표현 형식으로 전송할 수 있습니다.
- 클라이언트-서버 디커플링
- 클라이언트와 서버 애플리케이션은 서로간에 완전히 독립적이여야 한다.
- 클라이언트 애플리케이션이 알아야하는 유일한 정보는 요청된 리소스의 URI이다.
- 요청된 데이터를 전달하는것 말고는 클라이언트 애플리케이션을 수정하지 않아야 한다.
- 무상태 (Stateless)
- REST 아키텍쳐에서 무상태는 서버가 이전의 모든 요청과 독립적으로 클라이언트 요청을 완료하는 통신 방법을 나타냅니다.
- 각 요청 간에 클라이언트의 정보를 저장하지 않고 분리하여 서로 연결되어있지 않아야합니다.
- 이는 서버가 매번 요청을 완전히 이해해서 이행할 수 있게 해줍니다.
- 계층화 시스템
- 호출과 응답이 서로 다른 계층을 통과합니다.
- 클라이언트와 서버 애플리케이션이 서로 간에 직접 연결된다고 가정 X
- 통신 루프에는 다수의 서로 다른 중개자가 있을 수 있다.
- 캐싱 가능성
- 가급적 리소스를 클라이언트 또는 서버측에서 캐싱할 수 있어야 합니다.
- 서버 응답에는 전달된 리소스에 대해 캐싱이 허용되는지 여부에 대한 정보도 포함되어야 합니다.
- 서버측 확정성 증가와 함께 클라이언트 측의 성능 향상을 동시에 얻을 수 있습니다.
- Code on demand (optional)
- 일반적으로 정적인 리소스를 전송하지만 특정한 경우에는 응답에 프로그래밍 코드를 포함할 수 있다.
API 발전 타임라인

REST API
- 특정 기술을 의미하는게 아닌 두 가지 개념이 합쳐진 것입니다.
- 아키텍쳐 스타일의 디자인 원칙을 준수하는 API입니다. 이러한 이유 때문에 REST API를 종종 RESTful API라고도 합니다.
- HTTP를 이용한 통신에서 HTTP가 가진 잠재력을 최대한 이용할 수 있도록 유도하는 모범사례.

HTTP request method
- HTTP를 사용하기 때문에 같은 매서드를 사용합니다

ex - GET /movies/avatar2
REST API 설계시 지켜야하는 규칙
잘 설계된 REST API는 각 요청이 어떤 동작이나 정보를 위한 것인지 그 요청의 모습 자체만으로 추론이 가능하다면 best
1. URI는 동사보다는 명사를, 대문자보다는 소문자를 사용하여야 한다.
Bad Example - http://test.com/Running/ Good Example - http://test.com/run/
2. 마지막에 슬래시 (/)를 포함하지 않는다.
Bad Example - http://test.com/test/ Good Example - http://test.com/test
3. 언더바 대신 하이폰을 사용한다.
Bad Example - http://test.com/test_blog Good Example - http://test.com/test-blog
4. 파일확장자는 URI에 포함하지 않는다.
Bad Example - http://test.com/photo.jpg Good Example - http://test.com/photo
5. 행위를 포함하지 않는다.
Bad Example - http://test.com/delete-post/1 Good Example - http://test.com/post/1
결론
알아본 내용들을 토대로 RESTful API를 사용할 때 확장성, 유연성, 독립성에서 이점을 얻을 수 있다.