728x90
Web
HTTP(Hypertext Transfer Protocol)
- HTML과 같은 하이퍼미디어 문서를 전송하기위한 애플리케이션 레이어 프로토콜
URI(Uniform Resource Identifier)
- 특정 리소스를 식별하는 통합 자원 식별자
HTML(Hyper Text Markup Language)
- 하이퍼 미디어를 표현하기 위한 언어
REST(Representational State Transfer)
- Client - Server
- Client : 데이터를 사용자에게 표시하거나 이에 대한 후속 작업을 처리한다.
- Server : 데이터를 저장 및 조작하고 효율적인 방식으로 클라이언트에게 제공한다.
- Stateless
- 모든 정보는 요청을 통해서만 이루어지며 요청에 대한 정보는 서버에 저장하지 않는다.
- Cache
- 클라이언트는 서버의 응답을 임시저장한다.
- 계층화
- 클라이언트와 서버 사이에 방화벽, 게이트웨이, 프록시 등 중간 계층을 두어 컴포넌트의 독립성을 확보한다.
- 인터페이스 일관성
- 아키텍처를 단순화시켜, 컴포넌트 간의 상호작용을 효율적으로 한다.
- Code on Demand(Optional)
- 클라이언트 기능 확장을 위한 코드를 서버로 부터 전달받아 코드를 실행한다.
REST 판단
- 자원의 식별
- 웹 기반의 REST에서는 리소스 접근 시, URI를 사용한다.
https://rest.co.kr/user/100
- Resource : user
- Identifier : 100
- 메시지를 통한 리소스 조작
- 다양한 방식으로 데이터를 전달한다.
- (Ex. HTML, XML, JSON, TEXT)
- HTTP Header 부분에 content-type을 명시하여 데이터의 타입을 지정하기도 한다.
- 자기 서술적 메시지
- HTTP 기반 REST에서는 HTTP Method, Header 정보, URI에 포함되는 정보로 표현한다.
- 애플리케이션 상태에 대한 엔진으로써 하이퍼미디어
- REST API를 개발할 때 단순히 Client 요청에 대한 데이터만 응답하는 게 아닌 관련 리소스에 대한 링크 정보까지 포함해야 한다.
URI 설계 패턴
URI(Uniform Resource Identifier)
- 인터넷에서 특정 자원을 나타내는 주소 값
- 값 자체는 유일하다.
- 응답은 달라질 수 있음
URL(Uniform Resource Locator)
- 인터넷 상에서 자원, 특정 파일이 어디에 위치하는지 식별 하는 주소
- ⭐️ URL은 URI의 하위 개념이다!
- 일상적으로 웹사이트 도메인을 말하는 경우는 URL 이라 한다.
URI 설계 원칙(RFC-3986)
/
슬래시 구분자는 계층 관계를 나타내는 데 사용한다.- URI 마지막 문자에
/
는 포함하지 않는다. - 하이픈(-)은 URI 가독성을 높이는데 사용한다.
- 밑줄(_) 은 사용하지 않는다.
- URI 경로에는 소문자를 사용한다.
- 파일 확장자는 URI에 포함하지 않는다.
- 프로그래밍 언어에 의존적인 확장자를 사용하지 않는다.
- 구현에 의존적인 경로를 사용하지 않는다.
- 세션 ID를 포함하지 않는다.
- 프로그래밍 언어의 Method 명을 이용하지 않는다.
- 명사에 단수형보다는 복수형을 사용해야한다.
- 컨트롤러 이름으로는 동사나 동사구를 사용한다.
- 경로 부분 중 변하는 부분은 유일한 값으로 대체한다.
- CRUD 기능을 나타내는 것은 URI에 사용하지 않는다.
- API에 있어서 서브 도메인은 일관성 있게 사용해야 한다.
HTTP(Hyper Text Transfer Protocol)
- TCP를 기반으로 한 REST의 특징을 모두 구현하고 있는 Web 기반의 프로토콜
- Request - Response 형태의 통신 방법
HTTP Method
Reference
728x90
'🧑💻 Language > Java' 카테고리의 다른 글
[Java] 객체 지향과 디자인 패턴 (0) | 2022.05.09 |
---|---|
[Java] 자료 구조 (0) | 2022.05.03 |
[Java] 객체 지향 프로그래밍(3) (0) | 2022.04.26 |
[Java] 객체 지향 프로그래밍(2) (0) | 2022.04.19 |
[Java] 객체 지향 프로그래밍 (1) (0) | 2022.04.07 |