본문 바로가기
OS & Network

Network - RESTful API 란

by 새발개발JA 2024. 1. 20.
반응형

오늘은 Restful api 에 대해서 공부해보았다. 업무적으로 하던 것들이 개념적으로 좀더 가깝게 다가온 것 같다

 


Network - RESTful API 란

 

REST API 란

REST 아키텍쳐 기반으로 API를 구현한 것으로 클라이언트 - 서버 사이에서 데이터를 보내주는 인터페이스이다 (데이터 통로 느낌)

** REST(Representational State Transfer)는 API 작동 방식에 대한 조건을 부과하는 소프트웨어 아키텍처

 

이 아키텍처로 만들어진 api들은 무상태 캐싱을 지원한다

• 무상태 - 이전 요청과 상관없이 서버 - 클라이언트가 통신 (모든 요청은 독립적)

 캐시 - 통신 속도 (응답시간)을 줄이기 위해 데이터 캐싱을 지원

 

 

REST API 특징

 

1. URI 를 사용한다  (고유식별자)
모든 데이터 그룹에는 고유한 ID가 존재하고, Server 안에 들어있다.
고유 ID는 ‘/groups/:group_id’ 처럼 사용한다. (HTTP URI)
Client는 URI 를 사용해 자원(데이터)에 진입할 수 있고, 데이터 조작하려면 Server에 요청한다.


2. HTTP Method (행위)
서버와 연결하기 위해 HTTP 프로토콜의 Method를 사용한다.
서버와 통신을 위해 REST API는 URI 와 메소드로 CRUD 를 한다. (GET, POST, PUT, DELETE 메소드)

Create : POST 
Read : GET
Update : PUT
Delete : DELETE

 

3. 요청하면 응답한다. (표현)
Client가 데이터를 서버에 요청하면, 서버는 이에 적절한 응답(Representation)을 보낸다.

이 응답을 바탕으로 클라이언트는 리소스를 조작할 수 있다.
REST에서 하나의 자원은 JSON, XML, TEXT, RSS 등 여러 형태의 Representation으로 나타내어 질 수 있다.

→ Rest api 를 통해 서버에 유저의 데이터를 요청한다. 서버가 보내준  유저 데이터를 가져와 마이페이지 화면을 그린다. 유저는 마이페이지에서 프로필 사진 업로드를 하면 api 를 통해 변경된 프로필 사진 정보가 서버로 보내지는 순환의 구조다 -주거니 받거니-

 

 

REST API 의 장점

 

1. 확장성이 좋다

클라이언트-서버 커뮤니케이션을 최적화해서 효율적으로 크기 조절이 가능하다

무상태라 서버로드가 없고, 캐싱은 반복적인 서버-클라의 상호작용X 을 없앤다. (네트워크 병목 현상이 저하↓)

 

2. 유연성이 좋다

클라-서버가 완전히 분리된다. 서버구성요소를 단순화하고 클라에 영향을 주지 않는다. 

 

3. 독립성이 좋다

API 설계에 영향X 을 주지 않으며 다양한 프로그램언어 사용이 가능하다.

 

 

✔️ 요청

URIHTTP메서드 + HTTP 헤더 + 바디(데이터 / 페이로드) 가 들어간다 

 

✔️ 인증 

(요청 - 응답 그 어딘가)

 

1. 기본 인증 (Basic)

요청 헤더에 사용자 이름과 암호를 넣어 전송, base64 로 인코딩

 

2. 전달자 인증 (Bearer)

유효한 토큰을 가진 사람에게만 인증해주는 프로세스이다. 토큰은 서버가 로그인하면 주는 암호화된 문자열이다

클라이언트는 리소스에 액세스하기 위해 요청 헤더에 토큰을 넣어 전송한다 (로그인한 유저들이 가지고 있음)

 

3. API 키

고유한 키 값를 최초 클라이언트에 할당하고

리소스에 액세스 할때마다 고유한 API 키를 사용해서 본인을 검증한다

(클라이언트가 키를 전송해야 해서 보안에 취약)

 

4. OAuth

모든 시스템에 대해 매우 안전한 로그인 액세스를 보장하기 위해 {암호 + 토큰} 을 결합.

서버는 먼저 암호를 요청하고 권한 부여 프로세스를 완료하기 위해 추가 토큰을 요청한다.

특정 범위와 수명으로 언제든지 토큰을 확인할 수 있다. (SNS 에서 많이 사용)

 

✔️ 응답

1. 상태 표시줄

요청 성공 또는 실패를 알리는 3자리 상태 코드

예를 들어, 2XX 코드는 성공을 나타내고 4XX 및 5XX 코드는 오류를 나타냅니다. 3XX 코드는 URL 리디렉션을 나타낸다

 

2. 헤더

응답 헤더와 메타 데이터도 포함된다.

이는 응답에 대한 추가 컨텍스트를 제공하고 서버, 인코딩, 날짜 및 콘텐츠 유형과 같은 정보를 포함합니다.

 

3. 본문(payload)

클라이언트는 일반 텍스트로 된 문서 형식인 XML 또는 JSON 형식으로 정보를 요청하면, 서버는 JSON 표현으로 반환한다

// 예를 들어 John이라는 사람의 이름과 나이를 요청했을 때,
// 서버는 json 형식으로 반환한다
{
  "name": "John",
  "age": 30
}

 

 

반응형

댓글