안녕하세요
K-인사이트 입니다.
REST/RESTful API 라는 용어는 일반적으로 많이 사용되지만 실제로 그 정의를 정확하게 이해하는 경우는 드물다고 할 수 있습니다. 아마도 열명 중 한명은 "JSON 데이터를 전달하기 위한 용도" 또는 "다른 시스템과 연동을 위한 API" 정도라고 설명할 것입니다.
이글에서는 REST API 의 역사와 구체적인 정의를 통해 우리가 일반적으로 사용하는 용어를 잘 이해하고 다시금 의미를 새기는 시간을 가져보도록 하겠습니다. 또한, 이제 막 프로그래밍을 배우는 분들에게도 이 글은 유용할 것이라고 믿습니다.
REST API 란?
📚 용어의 의미 측면
REST는 REpresentational State Transfer의 약자입니다. 이를 직역하면 "표현 상태 전송"이라고 해석되지만 의미를 풀어쓰면 다음과 같습니다.
웹 서버는 보통 리소스(resource, 자원)을 클라이언트에게 전송합니다. 그리고 REST에서는 자원을 자원 자체와 자원의 표현이라는 두가지로 구분을 합니다. 따라서, Respresentational 을 (자원의) 표현이라고 할 경우 자원의 상태 정보를 교환하는 것으로 해석할 수 있습니다. 여기서 자원이란 문서, 이미지, 데이터 등을 의미합니다.
REpresentational State Transfer = 자원의 상태 정보를 교환
다음으로 API 는 Application Programming Interface의 줄임말(약자)입니다. 응용 프로그래밍 인터페이스라는 의미로 다른 응용 프로그램이 활용가능한 인터페이스를 제공해줌을 의미합니다.
종합하면 REST API는 "자원의 상태 정보를 교환하는 응용 프로그램 인터페이스"를 의미합니다.
RESTful API 란?
REST는 지침(가이드라인)이기 때문에 이 개념을 더하면 "자원의 상태 정보를 교환하는 지침"을 말합니다. RESTful API는 이러한 REST 지침을 잘 준수하는 API를 말합니다.
RESTful API = (REST 지침을 준수하는) 자원에 접근할 수 있도록 제공하는 애플리케이션 개발 인터페이스
따라서, 개발자는 REST API 지침을 준수하는 RESTful API 를 개발한다고 표현하는 것이 정확합니다. 그렇다면, REST 지침이 무엇인지 한번 알아보겠습니다.
1. 슬래시 구분자(/ )는 계층 관계를 나타내는데 사용
슬래시는 계층 관계를 나타낼 때 사용합니다. 즉, 집이라는 범주에 오피스텔, 아파트라는 하위 개념들이 포함됩니다. 따라서, URI를 설계할 때 아래와 같은 형태가 됩니다.
protocol://domain/상위범주/하위범주
http://k-in.tistory.com/houses/studio
2. URI 마지막 문자로 슬래시(/ )를 포함하지 않는다.
만약, URI의 끝에 슬래시가 붙고 붙지 않는 표현이 동시에 가능하다면 혼동을 줄 수 있습니다. 예를 들어, /animals/monkey/ 와 /animals/monkey 가 동시에 허용된다면 혼동을 줄 수 있다는 의미입니다. REST 지침은 이러한 혼동을 경계하여 URI 마지막 문자에 슬래시(/)를 포함하지 않도록 규정하고 있습니다.
❌ http://k-in.tistory.com/animals/monkey/
✅ http://k-in.tistory.com/animals/monkey
3. 하이픈(-)은 URI 가독성을 높이는데 사용
간결한 URI 를 사용하면 좋겠지만 긴 문자열을 사용해야될 경우에는 하이픈(-)을 통해 가독성을 높입니다. 또한, 밑줄(_)은 사용하지 않습니다.
❌ http://k-in.tistory.com/animals/long_tail_monkey
✅ http://k-in.tistory.com/animals/long-tail-monkey
4. URI 경로에는 소문자가 적합하다.
RFC 3986는 URI 문법 형식을 규정하는 지침입니다. 이 지침에서는 URI 스키마와 호스트를 제외한 나머지에서는 대소문자를 구별하도록 규정하고 있습니다. 따라서, REST 지침은 대문자 사용을 피하며 소문자만 이용해서 URI 경로를 지정하도록 합니다.
❌ http[s]://k-in.tistory.com/animals/Long-Tail-Monkey
✅ http[s]://k-in.tistory.com/animals/long-tail-monkey
5. 파일 확장자는 URI에 포함시키지 않는다.
REST API 지침은 전송하는 데이터의 포맷을 지시하기 위한 파일 확장자를 URI에 포함시키지 않도록 규정합니다. 대신, Accept 헤더를 사용하여 이미지, 문서 등을 지시하도록 가이드합니다.
❌ http[s]://k-in.tistory.com/animals/Long-Tail-Monkey.jpg
✅ http[s]://k-in.tistory.com/animals/long-tail-monkey
Accept: image/jpg
6. 리소스 간에는 연관 관계를 계층화 시켜서 표현한다.
리소스들은 필연적으로 연관 관계를 형성합니다. 대표적인 예시로 BYOD 정책을 실시하는 기업들의 경우, 직원들의 개인 기기를 업무에 사용하는 것을 허용하되 사용자 별로 기기를 등록해서 사용하도록 합니다. 이때, 한 직원에게 다수의 기기들이 등록될 수 있습니다. HR 시스템이 RESTful API 를 제공할 때는 "직원/{직원고유식별값}/기기" 와 같은 형태여야 한다고 REST API 지침은 말합니다.
✅ http[s]://k-in.tistory.com/employees/100000/devices
맺음말
지금까지 REST API와 RESTful API에 대해서 알아보았습니다.
REST 지침을 잘 준수하는 RESTful API를 개발하는데 도움이 되길 바랍니다.
이상입니다.
K-인사이트 올림.
'프로그래밍' 카테고리의 다른 글
면접, 단일 장애점을 예방하는 Microservice Architecture 개념 분해 (53) | 2024.03.27 |
---|---|
파이썬 버전관리, pipenv를 이용한 개발환경관리 (61) | 2024.03.21 |
코드 리뷰 주의사항, 선언(Declaration)과 정의(Definition)의 차이점 (78) | 2024.02.27 |
PHP 갑작스럽게 500 에러가 발생하였다면? - max_execution_time 설정 (111) | 2024.02.22 |
컴퓨터 과학, First Class Functions/Citizens/Objects 의 개념 (5) | 2024.02.15 |