방명록
- [Tech] Restful API란?2023년 12월 29일 09시 51분 48초에 업로드 된 글입니다.작성자: 봉주니
한줄요약 : 5번, 6번 항목을 지키기 어렵기 때문에 Restful API는 정확히 구현하기 어렵다. HTTP API라고 해달라고, REST 를 만든 로이필딩이 말한다.
- 한마디로 REST 의 특성을 가진 API
- REST (Representational State Transfer)
- 자원의 표현으로 구분하여 해당 자원의 상태를 주고 받는 것
- 웹의 기존 기술과 HTTP 프로토콜을 그대로 사용함
- HTTP URI를 통해 자원을 명시하고, Method (POST, GET, PUT, DELETE)를 통해 자원에 대한 CRUD 를 적용한다.
- REST 의 구성
- 자원(Resource) - URI
- 행위(Verb) - Http Method
- 표현(Representations) - JSON,XML,TEXT
- 자원 URI
- 모든 자원에 고유한 ID가 존재하고, 이 자원은 Server에 존재한다.
- 자원을 구분하는 ID는 /global/issue/1 와 같은 HTTP URI 이다.
- 행위 - Http Method
- HTTP 프로토콜의 Method를 사용한다.
- POST, GET, PUT, DELETE 를 제공한다.
- 표현
- 클라이언트가 자원의 상태에 대한 조작을 요청하면 Server는 이에 적절한 응답을 보낸다.
- REST에서 하나의 자원은 JSON, XML, TEXT 등 여러 형태로 나타낼 수 있다.
REST 는 아키텍쳐 스타일 → 제약조건의 집합
REST의 특징
- Client-server architecture
- 클라이언트와 서버가 서로 독립적이라 별도의 진화가 가능하다.
- client는 server 에서 어떤 일을 수행하더라도 내부 작업을 알지 않아도 된다.
- Statelessness(무상태성)
- 클라이언트에서 서버로 각 요청에는 그 요청에 필요한 모든 정보가 포함되어야 한다.
- Cacheability
- 요청에 대한 응답 내의 데이터에 해당 요청은 캐시가 가능한지 불가능 한지 명시해야 한다.
- Layered system
- REST Server는 다중 계층으로 구성 될 수 있고, 프록시나 게이트웨이 등 중간 매체도 사용 가능하다.
- Self-Descriptive Message (4번부터 만족)
- 글로벌로지스IS팀을 조회
{"id":1,"name":"글로벌로지스IS팀"}
- HTTP Status 추가
HTTP/1.1 200 OK {"id":1,"name":"글로벌로지스IS팀"}
- Content-type 추가
HTTP/1.1 200 OK Content-Type: application/json {"id":1,"name":"글로벌로지스IS팀"}
- 해결방법
- MEDIA TYPE 정의 (IANA 등록)
- HTTP/1.1 200 OK Content-Type: application/ldcc.team+json {"id":1,"name":"글로벌로지스IS팀"}
- link header에 명세를 확인할 수 있는 링크 삽입
HTTP/1.1 200 OK Content-Type: application/json Link: <https://ldcc.com/docs/team>; rel="profile" {"id":1,"name":"글로벌로지스IS팀"}
- {"id":1, "name":"글로벌로지스IS팀", "member":"<http://localhost:8080/api/ldcc/lglis/member>", "damdang":"<http://localhost:8080/api/ldcc/lglis/damdang>", "self":"<http://localhost:8080/api/ldcc/lglis>" }
- Uniform Interface
- Self-descriptive message
- Hypermedia As The Engine Of Application State (HATEOAS)
- Resource-Based
- Manipluation Of Resources Through Representations
- Hypermedia As The Engine of Application State (HATEOAS)
- Hypermedia (링크)를 통해서 애플리케이션의 상태 전이가 가능해야 한다.
- 링크 추가
- Hypermedia (링크)를 통해서 애플리케이션의 상태 전이가 가능해야 한다.
- HAL 사용
- HAL(Hypertext Application Language)
- JSON, XML 코드 내에서 외부 리소스에 대한 링크를 정의하기 위한 규칙
- 타입
- application/hal+json
- application/hal+xml
{ "data": { // HAL JSON의 리소스 필드 "id": 1, "name": "글로벌로지스IS팀", "content": "HAL JSON을 이용한 JSON처리" }, "_links": { // HAL JSON의 링크 필드 "self": { "href": "<http://localhost:8080/api/ldcc/lglis>" // 현재 api 주소 }, "team": { "href": "<http://localhost:8080/docs/team>" // 해당 api의 문서 }, "next": { "href": "<http://localhost:8080/api/ldcc/lglis/member>" // 멤버조회 }, "prev": { "href": "<http://localhost:8080/api/ldcc/lglis/damdang>" // 본부조회 } } }
- Code on demand(optional)
- 서버에서 코드를 클라이언트로 보내서 동작할수 있어야한다 → ex) 자바스크립트
GraphQL - https://hahahoho5915.tistory.com/63
반응형'TechStudy' 카테고리의 다른 글
[Tech] VueJS (2) 2023.12.30 다음글이 없습니다.이전글이 없습니다.댓글