<TIL> 23. RESTful API? API?

YUJIN LEE·2023년 2월 25일
0

개발log

목록 보기
19/149

RESTful API?

두 컴퓨터 시스템이 인터넷을 통해 정보를 안전하게 교환하기 위해 사용하는 인터페이스.
안전하고 신뢰할 수 있으며 효율적인 소프트웨어 통신 표준을 따르므로 정보교환 지원

API?

어플리케이션 프로그래밍 인터페이스는 다른 소프트웨어 시스템과 통신하기 위해 따라야 하는 규칙 정의. 개발자는 다른 어플리케이션이 프로그래밍 방식으로 어플리케이션과 통신 할 수 있도록 api를 표시하거나 생성.
웹 api는 클라이언트와 웹 리소스 사이의 게이트웨이

클라이언트

웹에서 정보에 액세스하려는 사용자.
api를 사용하는 사람이거나 소프트웨어 시스템.

리소스

다양한 애플리케이션이 클라이언트에게 제공하는 정보
이미지, 동영상, 텍스트, 숫자 또는 모든 유형의 데이터일 수 있다.
클라이언트에 리소스를 제공하는 시스템을 서버라고 함.
api를 사용해 리소스를 공유, 보안, 제어 및 인증을 유지하며 웹서비스 제공

REST

Repressentational State Transfer은 api 작동 방식에 대한 조건을 부과하는 소프트웨어 아키텍처.
REST는 처음에 인터넷과 같은 복잡한 네트워크에서 통신하기 위한 지침으로 만들어짐.
REST 기반 아키텍처를 사용하여 대규모의 고성능 통신을 안정적으로 지원할 수 있다.
쉽게 구현, 수정할 수 있어 모든 api 시스템을 파악하고 여러 플랫폼에서 사용할 수 있다.

REST architecture 원칙

  • 균일한 인터페이스
    모든 RESTful 웹서비스 디자인의 기본.
    서버가 표준 형식으로 정보를 전송함을 나타냄.

4가지 architecture 제약 조건
1. 요청은 리소스를 식별해야 함. 이를 위해 균일한 리소스 식별자를 사용.
2. 클라이언트는 원하는 경우 리소스를 수정하거나 삭제하기에 충분한 정보를 리소스 표현에서 가지고 있음.
서버는 리소스를 자세히 설명하는 메타데이터를 전송해 이 조건 충족
3. 클라이언트는 표현을 추가로 처리하는 방법에 대한 정보를 수신.
이를 위해 서버는 클라이언트가 리소스를 적절하게 사용할 수 있는 방법에 대한 메타데이터가 포함된 명확한 메시지 전송.
4. 클라이언트는 작업을 완료하는 데 필요한 다른 모든 관련 리소스에 대한 정보 수신.
서버는 클라이언트가 더 많은 리소스를 동적으로 검색할 수 있도록 표현에 하이퍼링크 넣어 전송.

  • 무상태
    서버가 이전의 모든 요청과 독립적으로 모든 클라이언트 요청을 완료하는 통신 방법.
    클라이언트는 임의의 순서로 리소스를 요청할 수 있고, 모든 요청은 무상태이거나 다른 요청과 분리.
    이 REST API 설계 제약 조건은 서버가 매번 요청을 완전히 이해해서 이행할 수 있음을 의미

  • 계층화 시스템
    계층화된 시스템 아키텍처에서 클라이언트는 클라이언트와 서버 사이의 다른 승인된 중개자에게 연결할 수 있으며 여전히 서버로부터도 응답을 받는다.
    서버는 요청을 다른 서버로 전달할 수 있다.
    클라이언트 요청을 이행하기 위해 함께 작동하는 보안, 애플리케이션 및 비즈니스 로직과 같은 여러 계층으로 여러 서버에서 실행되도록 RESTful 웹서비스를 설계할 수 있다.
    이러한 계층은 클라이언트에 보이지 않는 상태로 유지된다.

  • 캐시 가능성
    RESTful 웹서비스는 서버 응답 시간을 개선하기 위해 클라이언트 또는 중개자에 일부 응답을 저장하는 프로세스인 캐싱 지원.

  • 온디맨드 코드
    REST 아키텍처 스타일에서 서버는 소프트웨어 프로그래밍 코드를 클라이언트에 전송해 클라이언트 기능을 일시적으로 확장하거나 사용자 지정 할 수 있다.

RESTful API를 사용시 이점

  • 확장성
    REST API를 구현하는 시스템은 REST가 클라이언트-서버 상호작용을 최적화해 효율적으로 크기 조정할 수 있다. 무상태는 서버과 과거 클라리언트 요청 정보를 유지할 필요가 없어 서버 로드를 제거. 잘 관리된 캐싱은 일부 클라이언트-서버 상호작용을 부분적으로 or 완전히 제거
    이러한 모든 기능을 성능을 저하시키는 통신 병목 현상을 일으키지 않으면서 확장성 지원

  • 유연성
    RESTful 웹서비스는 완전한 클라이언트-서버 분리를 지원.
    각 부분이 독립적으로 발전할 수 있도록 다양한 서버 구성 요소를 단순화하고 분리.
    서버 애플리케이션의 플랫폼 또는 기술 변경은 클라이언트 애플리케이션에 영향x
    애플리케이션 함수를 계층화하는 기능은 유연성을 더욱 향상
    개발자는 애플리케이션 로직을 다시 작성하지 않고도 데이터베이스 계층을 변경할 수 있다.

  • 독립성
    REST API는 사용되는 기술과 독립적.
    API 설계에 영향을 주지 않고 다양한 프로그래밍 언어로 클라이언트 및 서버 애플리케이션을 모두 작성할 수 있다.
    또한 통신에 영향을 주지 않고 양쪽의 기본 기술을 변경할 수 있다.

RESTful API 작동방법

RESTful API의 기본 기능은 인터넷 브라우징과 동일.
클라이언트는 리소스가 필요시 api를 사용해 서버에 접속.
api개발자는 서버 애플리케이션 api문서에서 클라이언트가 REST API를 어떻게 사용해야 하는지 설명.
1. 클라이언트가 서버에 요청 전송. 클라이언트가 api 문서에 따라 서버가 이해하는 방식으로 요청 형식 지정
2. 서버가 클라이언트를 인증하고 해당 요청을 수행할 수 있는 권한이 클라이언트에 있는지 확인
3. 서버가 요청을 수신하고 내부적 처리
4. 서버가 클라이언트에 응답 반환, 응답에는 요청이 성공했는지 여부를 클라이언트에 알려주는 정보가 포함. 응답에는 클라이언트가 요청한 모든 정보도 포함

RESTful API 클라이언트 요청에 어떤것이 포함?

고유 리소스 식별자

서버는 고유한 리소스 식별자로 각 리소스 식별.
REST 서비스의 경우 서버는 일반적으로 URL(Uniform Resource Locator)을 사용해 리소스 식별 수행. URL은 리소스에 대한 경로 지정.
URL은 요청 엔드포인트라고도 하며 클라이언트가 요구하는 사항을 서버에 명확하게 지정

메서드

개발자는 종종 Hypertext Transfer Protocol(HTTP)을 사용해 RESTful API를 구현.
HTTP 메서드는 리소스에 수행해야 하는 작업을 서버에 알려줌.

  • GET
    클라이언트는 GET을 사용해 서버에 지정된 URL에 있는 리소스에 액세스.
    GET요청 캐싱, RESTful API 요청에 파라미터를 넣어 전송, 전송 전에 데이터 필터링하도록 서버에 지시 가능

  • POST
    클라이언트는 POST를 사용하여 서버에 데이터 전송. 요청과 함께 데이터 표현 포함.

  • PUT
    클라이언트는 PUT을 사용하여 서버의 기존 리소스를 업데이트
    POST와 달리, RESTful 웹 서비스에서 동일한 PUT 요청을 여러 번 전송해도 결과 동일.

  • DELETE
    클라이언트는 DELETE 요청을 사용해 리소스 제거. DELETE 요청은 서버 상태를 변경할 수 있다. 하지만 사용자에게 적절한 인증이 없으면 요청 실패

HTTP 헤더

요청 헤더는 클라이언트와 서버 간에 교환되는 메타데이터.
요청 헤더는 요청 및 응답의 형식을 나타내고 요청 상태 등에 대한 정보를 제공.

  • 데이터
    REST API 요청에는 POST, PUT 및 기타 HTTP 메서드가 성공적으로 작동하기 위한 데이터가 포함될 수 있다.

  • 파라미터
    RESTful API 요청에는 수행해야 할 작업에 대한 자세한 정보를 서버에 제공하는 파라미터가 포함될 수 있다.

    - URL 세부정보를 지정하는 경로 파라미터
    - 리소스에 대한 추가 정보를 요청하는 쿼리 파라미터
    - 클라이언트를 빠르게 인증하는 쿠키 파라미터.

RESTful API 인증 방법이란?

RESTful 웹서비스는 응답을 보내기 전에 먼저 요청을 인증해야한다.
인증은 신원을 확인하는 프로세스.
RESTful 서비스 클라이언트는 신뢰를 구축하기 위해 서버에 자신의 신원을 증명해야함.

4가지 인증 방법

HTTP 인증

기본 인증
- 기본 인증에서 클라이언트는 요청 헤더에 사용자 이름과 암호를 넣어 전송.
안전한 전송을 위해 이 페어를 64자의 세트로 변환하는 인코딩 기술인 base64로 인코딩.

전달자 인증
- 토큰 전달자에 대한 액세스 제어를 제공하는 프로세스를 나타냄. 
일반적으로 전달자 토큰은 서버가 로그인 요청에 대한 응답으로 생성하는 암호화된 문자열.
클라이언트는 리소스에 액세스하기 위해 요청 헤더에 토큰 넣어 전송.

API 키
- 서버는 고유하게 생성된 값을 최초 클라이언트에 할당. 클라이언트는 리소스에 액세스하려고 할 때마다 고유한 API 키를 사용하여 본인을 검증. API 키의 경우 클라이언트가 이 키를 전송해야 해서 네트워크 도난에 취약해 덜 안전.

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

RESTful API 서버 응답에 포함되어있는 것

상태 표시줄

상태 표시줄에는 요청 or 실패를 알리는 3자리 상태코드가 있음.
3xx코드는 URL 리디랙션 나타냄.

메시지 본문

클라이언트는 데이터 작성 방식을 일반 텍스트로 정의하는 XML or JSON 형식으로 정보를 요청할 수 있다.

헤더

응답에는 응답에 대한 헤더 또는 메타데이터도 포함.
이는 응답에 대한 추가 컨텍스트를 제공. 서버, 인코딩, 날짜 및 콘텐츠 유형과 같은 정보 포함.

AWS가 RESTful API 관리에 도움을 주는것 .

Amazon API Gateway는 어떤 규모에서든 개발자가 API를 손쉽게 생성, 게시, 유지 관리, 모니터링 및 보안 유지할 수 있도록 하는 완전관리형 서비스.
API Gateway를 사용하면 실시간 양방향 통신 애플리케이션을 위한 RESTful API 생성 가능.
API Gateway를 사용하여 수행할 수 있는 것.
1. API 요청 및 응답 모두에 대해 사용자에게 고속 성능 제공.
2. AWS identity and management(IAM)와 Amazon Cognito를 사용해 API에 대한 액세스 권한 부여(기본적으로 OAuth 지원)
3. API Gateway를 사용해 동일한 API의 여러 버전을 동시에 실행하여 새로운 버전을 빠르게 반복, 테스트 및 출시
4. API Gateway에서 API 호출, 데이터 대기 시간 및 오류율에 대한 성능지표 및 정보 모니터링

profile
인정받는 개발자가 되고싶습니다.

0개의 댓글