-
REST APIBackEnd/Spring Boot 2022. 5. 25. 21:30반응형
REST API
- REST를 기반으로 만들어진 API
REST
- Representational State Transfer의 약자
- 2000년도 로이 필딩(Roy Fielding)의 박사학위 논문에서 최초로 소개된 개념
- 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식
- 웹에 존재하는 모든 자원(이미지, 동영상, 텍스트 등)에 고유한 URI를 부여해 활용하는 개념
REST 구성요소
- 자원(Resource): HTTP URI
- 행위(Verb): HTTP Method(GET, POST, PUT, DELETE 등)
- 표현(Representation): 서버가 응답으로 보내주는 자원의 상태(JSON, XML, TEXT 등)
REST 특징
- Uniform(유니폼 인터페이스): URI로 지정한 자원에 대한 조작을 통일되고 한정적인 인터페이스로 수행합니다.
- Stateless(무상태성): 클라이언트의 Context를 서버에 저장하지 않기에 API 서버는 들어오는 요청만 단순히 처리합니다.
- Cacheable(캐시 가능): HTTP가 가진 캐싱 기능을 적용할 수 있습니다.
- Self-descriptiveness(자체 표현 구조): REST API 메시지만 보고도 쉽게 이해가 가능한 자체 표현 구조입니다.
- Client-Server 구조: 클라이언트와 서버 역할을 구분하여 의존성을 제거합니다.
- 계층형 구조: 사용자 인증, 암호화, 로드밸런싱 등의 계층을 추가하여 구조상의 유연성을 가질 수 있습니다.
REST 장점
- Easy to use: HTTP 인프라를 그대로 사용하기에 별도 인프라 구축을 요구하지 않습니다.
- Complete Separation between Client and Server: 클라이언트와 서버의 역할이 명확하게 분리됩니다.
- Detail expression for specific data type: 특정 타입(JSON, XML 등)의 데이터를 페이로드(Body)에 표현할 수 있습니다.
REST 단점
- Restriction of HTTP Method: 메소드 형태가 제한적입니다.
- Absense of Standard: 표준이 존재하지 않습니다.
REST API 설계 시 고려사항
- Consumer first: 개발자 입장이 아닌 API을 사용하는 소비자 입장에서 간단 명료하고 직관적이게 설계합니다.
- Make best use of HTTP: HTTP의 장점을 최대한 살려 설계합니다.
- Request methods: 리소스별 적절한 HTTP Method(GET/POST/PUT/DELETE)를 사용합니다.
- Response Status: API 응답 시 적절한 HTTP 상태 코드(200/404/400/201/401)를 결정합니다.
- No secure info in URI: URI를 통해 크리티컬한 데이터를 제공하면 안됩니다.
- Use plurals: 단수형보다는 복수형을 사용합니다.
- User nouns for resources: 리소스에 대한 정보는 명사형태를 사용합니다.
- For exceptions: POST /users/{id}, DELETE /users/{id}와 같이 일관된 엔드포인트를 가지는 것이 좋습니다.
Richardson Maturity Model
Richardson Maturity Model은 REST 접근 방식의 주요 요소를 세 단계로 나눈 모델입니다. 여기에는 resources, http verbs 및 hypermedia controls이 도입됩니다. 로이 필딩(Roy Fielding)은 Level3이 REST의 전제 조건임을 명백히 했습니다.
- Level 0
- Level 1: Resources
- Level 2: Level1 + HTTP Methods
- Level 3: Hypermedia Controls, Level2 + HATEOAS(DATA + Next Possible Actions)
[참고자료]
반응형'BackEnd > Spring Boot' 카테고리의 다른 글
Spring Boot 핵심 기능 2 - 라이브러리 관리 (0) 2023.04.19 Spring Boot 핵심 기능 1 - 내장 톰캣 (0) 2023.03.25 HAL Browser (0) 2022.05.25 Actuator (0) 2022.05.20 HATEOAS (0) 2022.05.20