1. API?
Application Programming Interface
- 두 소프트웨어가 서로 통신하는데 필요한 일종의 약속으로,통신은 requests와 response를 통해서 이루어짐
- 이 약속에 대한 일련의 정의(definitions)나 규약(protocols)들이 정해져있고,
- Client(request) → ← Server(response)
2. REST
1) REST
Representational State Transfer
- REpresentational : 대표적인
- State : 상태의
- Transfer : 전송
- 로이필딩(Roy Fielding)이 자신의 2000년 박사 학위 논문에 정의한 네트워크 소프트웨어 아키텍처
- ‘네트워크에서 통신 구성시 이런 구조로 설계하라는 지침’
- 기존에는 Network 통신을 위해 제시하였으나, 네트웨크의 대부분이 WWW이기 때문에 웹 기반의 전송을 위해 쓰이는 경우가 대부분임
- 좀 더 구체적으로 말하자면 자원을 정의하고 자원에 대한 주소를 지정하는 방법 전반에 대한 패턴
- 이러한 지침을 잘 따라서 적는 것이 RESTful API → 그렇다면 어떻게 따라서 적으면 될까?
2) Architectural style
- Uniform interface (통일된 인터페이스)
- 가장 근본
- 서버는 정보를 전달할 대 표준화(정형화)된 방법으로 전송
- 제약조건 4가지(의역)
- 자원은 URI를 사용하여 주고받음
- Client는 이 자원에 대해 충분한 정보를 가져야함
- Server는 메타데이터를 활용하여 충분한 정보를 제공함
- Client는 이 자원을 어떻게 처리할지에 대해서도 정보를 받아야하고,
- Server는 이러한 처리과정도 메타데이터를 활용하여 제공함
- Server는 hyperlinks를 활용하여 기존 resources들 말고 좀 더 다양한 resources를 client가 처리할 수 있게 해줌
- Statelessness (무상태성)
- 클라이언트가 보내는 모든 request를 독립적으로 수행함
- 각 request들끼리 서로 연관되어 있지 않아서 서버는 각 request를 완전히 독립적으로 처리 가능
- Layered System (계층화)
- 클라이언트와 서버 사이에 계층화 가능
- 예를 들어, proxy 서버나 암호화 계층 등 다양한 중간 매체를 사용 가능함
- Cacheability (캐시가능)
- Restful 웹 서비스는 캐싱을 지원
- 클라이언트는 response를 필요한 저장, 서버는 response time 감소
3. RESTful APIs?
- 두 컴퓨터 시스템이 인터넷을 통해 정보를 안전하게 교환하기 위해 사용하는 API
- Restful API를 통해 secure, reliable, efficient한 통신 표준을 지키기 때문에 효율적인 정보 교환이 용이해짐
1) 작동방식
- 클라이언트 → 서버에 request (API documentation을 따라 요청)
- 서버는 클라이언트가 제대로 된 놈인지 검사
- 서버는 request를 받고 내부적으로 프로세스를 진행
- 서버 → 클라이언트에 response (request 성공적인지, client가 요청한 request를 포함한 정보들)
2) Client Request 구성요소
- URI (Unique resource identifier) → 식별
- 각 자원에 대한 유니크한 식별자
- URL을 통해서 이 식별자의 자원을 실행시킴
- Uniform Resource Locator → 위치
- URL은 웹사이트 주소와 유사함
- URL은 클라이언트가 원하는 것을 명확하게 가르킴
- HTTP 방식
- GET
- POST
- PUT
- DELETE
- HTTP Header
- Data : POST, PUT, 다른 HTTP 방식을 위한 데이터를 포함
- Parameters
- path parameter : 세부 정보 지정
- /users/123 # 아이디가 123인 사용자를 가져온다.
- query parameter : 리소스에 대한 추가정보 요청
- /users?id=123 # 아이디가 123인 사용자를 가져온다.
- cookie parameter : 클라이언트 인증
3) Server Response 구성 요소
- Status Bar
상태코드 200 일반적인 response 성공 201 POST method에 대한 response 성공 400 클라이언트 요청 부적절할 경우 응답코드 301 클라이언트가 요청한 리소스에 대한 URI 변경되었을 때 사용하는 코드 500 서버에 문제가 있을 경우 사용하는 응답코드 - message body
- XML, JSON 등
- JSON 예시 : {”name” : “jamie”, “favorite” : “chicken”}
- header
- 헤더와 메타데이터를 포함
- 여기에는 서버, 인코딩, 날짜, content type 등의 다양한 정보들이 포함되어 있음
4) 장점
Scalability (확장가능성)
- 서버와 클라이언트의 상호작용을 최적화 함으로써 시스템의 규모를 효율적으로 확장/축소 시킬 수 있음
- 예를 들어, 무상태성은 서버의 부하를 줄이고, 잘 관리된 캐시는 클라이언트-서버의 상호작용 과정을 적게 만듦
Flexibility (유연성)
- 서버와 클라이언트가 분리되어 있기 때문에 유연하게 움직임
- 무슨 말이냐면 클라이언트와 서버가 request, response만 주고 받기 때문에 한 쪽의 platform이나 technology가 바뀌더라도 반대편에서 영향을 받지 않음
- 계층화가 이러한 탄력성을 더욱 더 증대시킴
Independence (독립적)
- 사용되는 기술과 독립적으로 쓰이기 때문에 REST API를 다양한 언어, 어플리케이션에서 사용 가능
[참고자료]
https://aws.amazon.com/ko/what-is/api/?nc1=h_ls
'Study > Computer' 카테고리의 다른 글
[OS] 메모리 관리 (메모리할당, 단편화, swapping, segmentation) (0) | 2023.03.18 |
---|---|
[OS] Blocking, Non-blocking, Sync, Async 개념 (굳이 4등분?) (2) | 2023.03.15 |
[OS] 스케쥴러와 CPU 스케쥴링 (0) | 2023.03.12 |
[기초] 2의 보수에 대해 알아보자! (2) | 2023.02.15 |
크롬 개발자도구 알아보기 (0) | 2023.02.09 |