YS's develop story

API와 REST API란 무엇인가..? 본문

기타/라이징프로그래머 2기

API와 REST API란 무엇인가..?

Yusang 2021. 2. 8. 22:00

RP2기 API와 REST API란 무엇인가..? 수업내용 정리

클라이언트와 서버가 Request, Response를 통해 주고받는 데이터 덩어리를 Packet라고 합니다.

 

Packet을 소포 상자라고 생각해 봅시다.

소포 상자에는 label이 붙어 있을 것인데 이 label를 Header라고 부릅니다.

Header에는 Meta data가 들어 있습니다.

 

  Meta data란...

   메타데이터는 데이터에 대한 데이터이다.

   이렇게 흔히들 간단히 정의하지만 엄격하게는 "어떤 목적을 가지고 만들어진 데이터"라고도 정의한다.

   가령 도서관에서 사용하는 서지 기술용으로 만든 것이 그 대표적인 예이다.

 

소포 상자 안에는 진짜 필요한 데이터들이 들어있을 것인데 이것을 Body라고 합니다.

HTTP 프로토콜을 이용해서 패킷이라는 데이터를 주고받는 방법은 아래와 같습니다.

 

GET 조회

POST 생성

PUT 수정

PATCH 일부수정

DELETE 삭제

 

JSON과 같은 데이터 포맷을 이용해 패킷의 body에 들어가는 데이터가 들어가게 됩니다.

 

API Application Programming interface (애플리케이션 프로그램 인터페이스)

프로그램들이 서로 소통하는 방법이 API,

코드들끼리 서로 소통하기 위해 만들어진 것이 API입니다.

API는 서버에서 만들어서 제공합니다.

 

예를 들자면 IOS 앱의 특정 API는 로그인, 다른 api는 게시물 조회,

또 다른 API는 게시물 삭제 등등 을 담당하게 됩니다.

이때 사용자가 특정 API를 사용하게 되면 백엔드 데이터베이스 서버로 가서 알림을 받게 됩니다.

 

사용자가 게시물 조회 API를 사용했으니까 사용자에게 게시물을 보여주기 위해 필요한

데이터를 데이터베이스에서 보내줘!! 이런 식으로 말이죠.

 

요즘에는 다양한 API들이 추가되어서 사용자에게 카메라나 마이크의 액세스 권한을 요구하는 API도 존재합니다.

 

API가 어떤 식으로 게시물을 가져오고, 어떻게 사용자의 마이크 액세스 권한을 요구하는지는

알 필요도 없고 볼 수도 없습니다.

그저 사용자는 API를 사용하기만 하면 되고, 그렇게 설계되었습니다.

 

마치 미사일 발사 버튼을 누를 때 버튼을 누르면 어떤 상호작용이 일어나고 어떠한 방식으로 미사일이 발사되는지 알 필요가 없는 것처럼 말입니다. 단지 버튼만 누르면 됩니다.!!

하지만 개발자는 이러한 API를 설계해야 하죠.

 

REST API

소프트웨어 프로그램 개발의 아키텍처의 한 형식이며 어떠한 자원을 식별하기 위해 해당 자원에 대해

고유한 URI를 부여하여 자원을 정의하고, 해당 자원을 활용하는 방법론을 의미합니다.

HTTP URI를 통해 자원을 명시하고, HTTP Method(POST, GET, DELETE, PUT)를 통해 해당 자원에 대한

CRUD Operation을 적용하는 것.

 

여기서 URI와 URL은 다른 것입니다.

URI는 인터넷에서 특정 자원을 나타내는 주솟값이고,

URL은 인터넷에서 특정 자원이나 파일의 위치를 나타내는 주솟값입니다.

 

일반적으로 REST API라고 하면 HTTP를 통해 CRUD를 실행하는 API를 뜻합니다.

웹 상에서 HTTP 프로토콜을 이용하여 URI를 통해 자원을 정의하고 

HTTP Method(GET, POST, PUT, DELETE, PATCH)를 통해 행위를 결정하며,

JSON 혹은 XML을 통해 데이터를 주고받습니다.

 

HTTP는 웹에서 GET, POST, PUT, DELETE 등의 메서드를 이용하여 정보를 주고받는 프로토콜입니다.

 

 

세계적으로 Method는 아래와 같이 동사의 의미를 부여하기로 약속을 하게 됩니다.

 

GET 조회

POST 생성

PUT 전체 수정

PATCH 일부 수정

DELETE 삭제

 

또한 URI에는 목적어를 정의하자고 약속했습니다.

 

Example)

GET  /user   ->  유저를 조회합니다.

POST /user   ->  유저를 생성합니다.

PATCH /user/:userid    ->   userid가 특정 번호인 유저를 수정합니다.

GET /user/:20   -> userid가 20인 유저의 정보를 가져옵니다.

 

유저 중 서울에 있는 애들만 조회하고 싶다면?? 

GET /user?address=서울

 

유저 중 서울에 있는 사람 중 나이가 20인 사람을 조회하고 싶다면....

GET /user address=서울&?age=20

 

Query StringPath Variable을 활용하여서 특정 인덱스를 조회하거나 필터링을 할 수 있습니다.

Rp2기 ) Query String 과 Path Variable 비교 및 활용

 

Rp2기 ) Query String 과 Path Variable 비교 및 활용

Query String, 쿼리 스트링 활용하기 '건대'라는 글자가 들어가는 특정 카페를 찾기 위해선 어떻게 해야 할까요? 아래와 같이 쿼리스트링을 활용하면 됩니다. cafeRoute.js cafecontroller.js 사용자가 쿼리

yusang.tistory.com

 

REST API 설계 시 가장 중요한 항목은 다음의 2가지로 요약할 수 있습니다.

1. URI는 정보의 자원을 표현해야 한다.
2. 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE...)로 표현한다.

 

즉 누가 보든 메서드와 URI를 봤을 때 어떤 의미 인지 알게끔 설계를 해야 한다는 것입니다..!!

 

URI 설계 시 주의할 점

1. 슬래시 구분자(/)는 계층 관계를 나타내는 데 사용한다.

 

2. URI 마지막 문자로 슬래시(/)를 포함하지 않는다.

 

3. 하이픈(-)은 URI 가독성을 높이는 데 사용한다.

 

4. 밑줄(_)은 URI에 사용하지 않는다.

 

5. URI 경로에는 소문자가 적합하다.

 

6. 파일 확장자는 URI에 포함시키지 않는다.

 

 

응답 코드 

잘 설계된 REST API는 URI만 잘 설계된 것이 아닌

그 리소스에 대한 응답을 잘 내어주는 것까지 포함되어야 합니다.

정확한 응답의 상태 코드만으로도 많은 정보를 전달할 수가 있기 때문에

응답의 상태 코드 값을 명확히 돌려주는 것은 생각보다 중요한 일이 될 수도 있습니다.

 

  200  클라이언트의 요청을 정상적으로 수행함

 

  201 클라이언트가 어떠한 리소스 생성을 요청, 해당 리소스가 성공적으로 생성됨

  (POST를 통한 리소스 생성 작업 시)

 

  400 클라이언트의 요청이 부적절할 경우 사용하는 응답 코드

 

  401 클라이언트가 인증되지 않은 상태에서 보호된 리소스를 요청했을 때 사용하는 응답 코드

  (로그인하지 않은 유저가 로그인했을 때, 요청 가능한 리소스를 요청했을 때)

 

  403 유저 인증 상태와 관계없이 응답하고 싶지 않은 리소스를 클라이언트가 요청했을 때 사용하는 응답 코드

  (403 보다는 400이나 404를 사용할 것을 권고, 403 자체가 리소스가 존재한다는 뜻이기 때문에)

 

  405 클라이언트가 요청한 리소스에서는 사용 불가능한 Method를 이용했을 경우 사용하는 응답 코드

 

  301 클라이언트가 요청한 리소스에 대한 URI가 변경되었을 때 사용하는 응답 코드

  (응답 시 Location header에 변경된 URI를 적어 줘야 한다)

 

  500 서버에 문제가 있을 경우 사용하는 응답 코드

Comments