[TIL-API] RESTful API란 무엇인가?

이용준·2022년 11월 20일
0

TIL

목록 보기
10/21

python과 java를 배우며 언어는 달라도 필자가 원하는 목적(웹 제작, 서버 구축 등)을 문제 없이 수행할 수 있겠다 생각했다.

그러던 중 파이썬으로 서버는 어떻게 구축할 수 있는지 궁금해 검색한 결과를 정리한다.

  • 검색 키워드
파이썬 서버 개발 > 파이썬 API 서버 구축 > django API 서버 구축 > RESTful API > RESTful API란?

1.RESTful API란

두 컴퓨터 시스템이 인터넷을 통해 정보를 안전하게 교환하기 위해 사용하는 인터페이스이다.

  • REST를 기반으로 만들어진 API를 의미.
    (REST 아키텍처 스타일을 따르는 API)

1-1. REST

  • API 작동 방식에 대한 조건을 부과하는 소프트웨어 아키텍처이다.
  • REST는 Representational State Transfer의 약자로 자원을 이름으로 구분해 해당 자원의 상태를 주고받는 모든것.
  • 리소스 상태에 대한 표현을 요청자에게 전송한다.
    (HTTP:JSON, HTML, XLT 등)

a) REST 아키텍처 스타일 원칙

  1. 균일한 인터페이스
    • 서버가 표준 형식으로 정보를 전송함
  2. 무상태
    • 클라이언트는 임의의 순서로 리소스를 요청할 수 있으며, 모든 요청은 무상태 혹은 다른 요청과 분리
  3. 계층화 시스템
    • 클라이언트 요청 이행위해 함께 작동하는 보안, 비즈니스 로직 등은 여러 계층으로 여러 서버에서 실행될 수 있도록 웹 서비스 설계 가능
  4. 캐시 가능성
    • 서버 응답 시간 개선을 위해 클라이언트 혹은 중개자의 일부 응답 저장하는 프로세인 캐싱 지원
  5. 온디맨드 코드
    • 서버는 프로그래밍 코드를 클라이언트에 전송해 클라이언트 기능일 일시적으로 확장하거나 조정할 수 있다.

1-2. API

  • 다른 소프트웨어 시스템과 통신하기 위해 따라야 하는 규칙.
  • 때때로 API는 정보 제공자와 사용자 간의 계약으로 지칭되며 소비자에게 필요한 콘텐츠(호출)와 생산자에게 필요한 콘텐츠(응답)로 구성된다.()

    "웹 API는 클라이언트와 웹 리소스 사이의 게이트웨이라 생각할 수 있다."
    1) 클라이언트
      * 정보에 엑세스하려는 사용자로, 사람이거나 소프트웨어 일 수 있다.
    2) 리소스
      * 애플리케이션이 클라이언트에 제공하는 정보
      * 클라이언트에 리소스를 제공하는 시스템을 서버라 한다.

2.장점

1. 확장성

아래 요소를 통해 성능 저하하는 통신 병목 현상을 일으키지 않으며, 확장성을 지원한다.

  1. 무상태는 서버가 과거 클라이언트 정보를 유지할 필요가 없어 서버 로드 제거
  2. 잘 관리된 캐싱으로 일부 클라이언트 - 서버 상호 작용을 부분적 혹은 완전히 제거
  3. REST가 클라이언트-서버 상호 작용을 최적화하므로 효율적 크기 조정 가능

2. 유연성

  1. 완전한 클라이언트-서버 분리 지원
  2. 각 부분이 독립적으로 발전할 수 있도록 다양한 서버 구성 요소 단순화 및 분리
  3. 서버 앱의 플랫폼/기술 변경은 클라이언트 앱에 영향을 주지 않는다.
  4. 앱 함수를 계층화하는 기능은 유연성을 더욱 확장시킨다

3. 독립성

  1. 통신에 영향을 주지 않고 양쪽의 기본 기술 변경 가능
  2. API 설계에 영향 없이 다양한 프로그래밍 언어로 클라이언트 및 서버 앱 모두 작성 가능

3.작동방식

(클라이언트) 리소스 필요할 때 API를 사용해 서버 접속
(API 개발자) API 문서에 REST API 사용 방법 설명

3-1. 일반적인 REST API호출 단계

  1. (클라이언트) 서버에 요청 전송
    • API 문서에 따라 서버가 이해하는 방식으로 요청
  2. (서버) 클라이언트 인증 및 클라이언트 권한 확인
  3. (서버) 요청 수신 및 처리
  4. (서버) 클라이언트에 응답 반환
  • 응답 - 성공 여부 포함
  • 응답 - 클라이언트 요청 정보

3-2. 클라이언트 요청

  1. 고유 리소스 식별자

    • URL(Uniform Resource Locator)을 사용해 리소스 식별 수행
    • 리소스에 대한 경로 지정
    • 요청 엔드포인트라 하며, 클라이언트가 요구하는. 사항을 서버에 명확하게 지정
  2. 메서드

    • HTTP 메서드, 리소스에 수행해야 하는 작업을 서버에 알려준다.
    • 일반적인 HTTP 메서드
    메서드설명
    GET* 해당 메서드로 서버의 지정된 URL의 리소스에 액세스(가져온다.)
    * 요청에 파라미터를 넣어 전송 전 데이터 필터링하도록 서버에 지시 가능
    POST* 서버에 데이터 전송
    (같은 POST 중복 요청시 리소스 중복 생성하는 부작용 )
    PUT* 리소스 업데이트
    * 동일 PUT 여러 번 전송해도 중복 생성 없음
    DELETE* 리소스 제거
    * 서버 상태 변경 가능
    * 사용자에게 인증 없으면 요청 실패
    • HTTP 헤더
      • 요청 헤더는 클라이언트와 서버 간 교환되는 메타데이터
    • 데이터
      • REST API 요청에는 POST, PUT 및 기타 HTTP 메서드가 작동하기 위한 데이터 포함될 수 있다.
    • 파라미터
      • URL 세부 정보 지정하는 경로 파라미터
      • 리소스에 대한 추가 정보 요청하는 쿼리 파라미터
      • 클라이언트 빠르게 인증하는 쿠키 파라미터

3-3. 서버 응답

REST 원칙에 따라 서버 응답에 아래와 같은 주요 구성 요소 포함해야 한다.
1. 상태 표시줄

  • 요청/성공/실패 알리는 3자리 상태 코드
  • 2xx - 성공 / 3xx - URL 리디렉션 / 4,5xx - 오류
  • 일반적 상태 코드
    200 : 일반 성공 응답
    201 : POST 메서드 성공 응답
    400 : 서버가 처리할 수 없는 잘못된 요청
    404 : 리소스 찾을 수 없음
  1. 메시지 본문
    • 응답 본문에는 리소스 표현이 포함된다.
    • 서버는 헤더에 포함된 내용 기반으로 적절한 표현 형식 선택
    • 클라이언트는 데이터 작성 방식을 XML or JSON 형식으로 요청 가능
    예)
    {"name":"John", "age":30}
  2. 헤더
    • 응답에 대한 헤더 또는 메타데이터도 포함
    • 서버, 인코딩, 날짜 등의 정보와 응답에 대한 추가 컨텍스트 제공

4.RESTful API 인증 방법

RESTful 서비스 클라이언트는 응답을 보내기 전 신뢰를 구축하기 위해 서버에 자신의 신원을 증명하는 인증이 필요하다.
RESTful API에는 4가지 일반적 인증 방법이 있다.

  1. HTTP 인증
    HTTP는 REST API 구현시 직접 사용할수 있는 일부 인증 체계를 정의한다.

    • 기본 인증
      • 클라이언트는 요청 헤더에 사용자 이름과 암호를 넣어 전송
      • 안전한 전송을 위해 이 페어를 64자의 세트로 변환하는 인코딩 기술인 base64로 인코딩한다.
    • 전달자 인증
      • 토큰 전달자에 대한 액세스 제어를 제공하는 프로세스이다.
      • 클라이언트는 리소스에 액세스하기 위해 요청 헤더에 토큰을 넣어 전송한다.
  2. API 키
    REST API 인증을 위한 또 다른 옵션

    • 서버는 고유하게 생성된 값을 최초 클라이언트에 할당
    • 클라이언트는 리소스에 액세스할 때마다 고유 API 키를 사용해 본인 검증 실시
    • 클라이언트가 이 키를 전송해야하므로 네트워크 도난에 취약
  3. OAuth

    • 모든 시스템에 대해 매우 안전한 로그인 액세스 보장위해 암호와 토큰 결합
    • 서버는 먼저 암호를 요청해 권한 부여 프로세스 완료하기 위해 추가 토큰 요청
    • 특정 범위와 수명으로 언제든 토큰 확인 가능

참고
https://aws.amazon.com/ko/what-is/restful-api
https://www.redhat.com/ko/topics/api/what-is-a-rest-api
https://khj93.tistory.com/entry/네트워크-REST-API란-REST-RESTful이란
https://appmaster.io/ko/blog/rest-apiran-mueosimyeo-dareun-yuhyeonggwa-eoddeohge-dareungayo

profile
뚝딱뚝딱

0개의 댓글