API

유영·2023년 3월 13일
0

DB

목록 보기
1/6

API는 정의 및 프로토콜 집합을 사용하여
두 소프트웨어 구성 요소가 서로 통신할 수 있게 하는 메커니즘입니다.

즉 특정 작업을 수행하거나 데이터를 공유할 수 있는, 사전에 약속된 함수들의 집합체이다.

예를 들어, 기상청의 소프트웨어 시스템에는 일일 기상 데이터가 들어 있습니다.
휴대폰의 날씨 앱API를 통해 이 시스템과 ‘대화’하여
휴대폰에 매일 최신 날씨 정보를 표시합니다.


CDN은 인터넷 사용자에게 콘텐츠를 안전하고 빠르게 전송하는 기술입니다.
다수의 이미지 파일 전송, 대용량 파일 다운로드, 끊김 없는 동영상 스트리밍 등에 주로 사용됩니다.
고객사의 오리진 서버에 있는 콘텐츠를 여러 지역의 CDN 캐시 서버로 전송하고, 고객의 사용자와 가장 가까운 곳에서 배포하여 보다 빠르고 안정적인 네트워크 환경을 제공합니다.
대용량 파일을 한꺼번에 배포해야 하는 게임사, 수많은 이미지를 로딩해야 하는 쇼핑몰, 강의 동영상을 제공해야 하는 이러닝 사이트 등에 특히 유용합니다.

<CDN을 사용해야 하는 이유>
콘텐츠를 고객사의 인스턴스(가상 서버)에서 사용자에게 직접 전송하지 않고,
CDN 엣지 서버를 통하여 전송하므로 전송 품질을 향상시킬 뿐 아니라 보안을 강화할 수 있습니다.
클라우드 인스턴스(가상 서버)를 CDN 서비스에 연결하고,
콘텐츠를 스토리지에 업로드하면 서비스를 바로 시작할 수 있습니다.
한 번의 설정으로 고객사의 국내 및 해외 사용자에게 최고의 전송 속도를 제공할 수 있습니다.


기술의 다층성

웹브라우저
운영체제
C언어
어셈블리어 언어
기계어 (EX. 010100010100 / LOW LEVEL)
전자공학 (EX. CPU, RAM, 전기를 켜다, 끄다)
전기공학
물리학

  • 각 층사이에서는 API를 통해 교류하고 있다.

API설계시 주의사항

1.url 에서는 add,delete같은 동사를 쓰지 않는다.
2.명사(컬렉션 이름)을 사용한다.
http methods : get/ post/ put /delete

  • get : 읽다
  • post : 생성
  • put : 업데이트
  • delete : 삭제

3.검색이나 필터링을 할 때에는
query parameter를 사용 -> api에 pagination 추가가능

UI vs API
사용자가 직접 시스템을 조작하는 것 - UI
웹브라우저에게 명령하는 것 - API

즉 API는 부품, 언어문법은 결합방법
API는 Applicatin Programming Interface의 줄임말로
API 의 맥락에서
애플리케이션고유한 기능을 가진 모든 소프트웨어를 나타낸다.
인터페이스두 애플리케이션 간의 서비스 계약이라 할 수 있다.
이 계약은 요청과 응답을 사용하여 두 애플리케이션이 서로 통신하는 방법을 정의한다.
API문서에는 개발자가 이러한 요청과 응답을 구성하는 방법에 대한 정보가 들어 있다.


REST API

오늘날 웹에서 볼 수 있는 가장 많이 사용되고 유연한 API입니다.
클라이언트가 서버에 요청을 데이터로 전송합니다.
서버가 이 클라이언트 입력을 사용하여 내부 함수를 시작하고
출력 데이터를 다시 클라이언트에 반환합니다.

  • REST는 Representational State Transfer의 줄임말입니다.

  • REST는 클라이언트가 서버 데이터에 액세스하는 데 사용할 수 있는
    GET, PUT, DELETE 등의 함수 집합을 정의합니다.

  • 클라이언트와 서버는 HTTP를 사용하여 데이터를 교환합니다.

  • REST API의 주된 특징은 무상태입니다.
    무상태는 서버가 요청 간에 클라이언트 데이터를 저장하지 않음을 의미합니다. 서버에 대한 클라이언트 요청은 웹 사이트를 방문하기 위해
    브라우저에 입력하는 URL과 유사합니다.
    서버의 응답은 웹 페이지의 일반적인 그래픽 렌더링이 없는 일반 데이터입니다.


SOAP 프로토콜과 Web API, REST 비교

정보 교환을 표준화하기 위해 SOAP(Simple Object Access Protocol)라는
프로토콜 사양이 개발되었습니다.
SOAP로 설계된 API는 XML 메시지 형식을 사용하며
HTTP 또는 SMTP를 통해 요청을 수신합니다.
SOAP를 사용하면 더 간편한 방법으로 애플리케이션을 다양한 환경에서 실행하거나
다양한 언어로 작성하여 정보를 공유할 수 있습니다.

또 다른 사양은 REST(Representational State Transfer)로,
REST 아키텍처의 제약 조건을 준수하는 웹 API를 RESTful API라고 합니다.
SOAP는 프로토콜이지만 REST는 아키텍처 스타일이라는 근본적인 차이가 있으며
따라서 RESTful 웹 API에는 공식적인 표준이 없습니다.
REST와 SOAP는 각기 다른 두 가지의 온라인 데이터 전송 방식입니다.
둘 다 웹 애플리케이션 간 데이터 통신을 허용하는 API를 구축하는 방법을 정의합니다.
SOAP는 프로토콜이지만, REST는 프로토콜이 아니라는 점이 주요 차이점입니다.
Roy Fielding의 논문인 '네트워크 기반 소프트웨어 아키텍처의 구조적 스타일과 설계'에 정의된 것처럼
RESTful 시스템의 다음 6가지 주요 제약 조건을 준수했을 때
RESTful API라고 간주할 수 있습니다.

  • 클라이언트 서버 아키텍처: REST 아키텍처가 클라이언트, 서버, 리소스로 구성되며 HTTP를 통해 요청을 처리합니다.

  • 스테이트리스: 요청이 통과하는 서버에는 클라이언트 콘텐츠가 저장되지 않으며 그 대신 세션 상태에 대한 정보가 클라이언트에 저장됩니다.

  • 캐시 가능성: 캐싱으로 일부 클라이언트-서버 간의 상호 작용이 제거됩니다.

  • 계층화된 시스템: 추가 계층으로 클라이언트-서버 간의 상호 작용을 조정할 수 있으며 이러한 계층은 로드 밸런싱, 공유 캐시 또는 보안과 같은 추가 기능을 제공할 수 있습니다.

  • 코드 온디맨드(옵션): 서버가 실행 가능한 코드를 전송하여 클라이언트의 기능을 확대할 수 있습니다.

  • 통합된 인터페이스: 이 제약 조건은 RESTful API 설계의 핵심이며 다음과 같은 4가지 측면을 포함합니다.

1)요청에서 리소스 식별: 리소스가 요청에서 식별되며 클라이언트로 반환된 표현으로부터 분리됩니다.
2)표현을 통한 리소스 조작: 클라이언트가 리소스를 나타내는 파일을 수신합니다. 이 표현에는 조작 또는 삭제를 허용할 수 있도록 충분한 양의 정보가 포함되어야 합니다.
3)자기 기술적(Self-descriptive) 메시지: 클라이언트에 반환되는 각 메시지에 클라이언트가 정보를 어떻게 처리해야 할지 설명하는 정보가 충분히 포함되어야 합니다.
4)애플리케이션 상태 엔진으로서의 하이퍼미디어: 리소스를 할당한 후 REST 클라이언트가 하이퍼링크를 통해 현재 사용 가능한 기타 모든 작업을 찾을 수 있어야 합니다.

웹 API 보안은 인터넷에 연결되는 API를 통한 데이터 전송과 관련되어 있습니다.
OAuth(Open Authorization)는 액세스 위임의 오픈 표준입니다.
사용자는 이를 통해 비밀번호를 공유하지 않고도
제3자에게 웹 리소스 액세스 권한을 부여할 수 있습니다.


API 인증

KINXCDN의 인증은 Token 발급 방식의 인증을 사용합니다.

인증과 인가
인증:authentication / 쉽게 말해 로그인
인가:authorization / 댓글을 다는등 로그인이 유지되는 상태에서 일어나는 일 / 서버가 허용해줌
JWT : JASON WEB TOKEN
쿠키 : 사이트 이용시 브라우저에 저장되는 내용
세션 : 서버에 저장된 내용 / 로그인 되어있는 상태를 유지하는 등
캐시 : 가져오는데 비용이 드는 데이터를 임시로 저장


kinxcdn은 온라인 신청으로 전세계에 cdn을 적용할 수 있도록 기획된 서비스.
사용자는 관리포털을 통해 오리진서버와 서비스지역만 선택하면 바로 국내와 글로벌 cdn을 이용할 수 있다.
글로벌 CDN을 쉽고 빠르게 시작할 수 있게 됐을 뿐만 아니라 ‘스마트 캐싱’, ‘웹 최적화’ 등의 부가 기능도 사용 가능하다.
스마트 캐싱은 콘텐츠를 유형에 따라 자동으로 분류해 전송한다.
이미지 등 정적 콘텐츠는 CDN 엣지를 통해 캐싱하고,
JSP나 PHP 등의 동적 콘텐츠는 오리진 서버에서 직접 가속 전송하는 것이다.
더불어 웹사이트 내 이미지, CSS, 자바스크립트, HTML 등 네 개 항목에 대한 웹 최적화를 통해
불필요한 데이터 용량을 줄임으로써 전송 속도를 높이고 비용을 절감할 수도 있다.


주요기능

웹/모바일 콘텐츠 전송
· 트래픽 폭주시 용량을 확대할 수 있는 온디맨드 방식(Capacity on Demand) 적용
· 퍼지(원본 수정 시 엣지 서버 파일 동기화) 기능
· 원하는 모든 국가에 콘텐츠 전송 가능

비디오 전송/재생
· 다양한 브라우저, 디바이스, 포맷 지원
· 플레이어 API 액세스 가능

게임 파일 다운로드 (클라이언트, 패치 등)
· 트래픽 폭주로 인한 서비스 중단 방지
· 최대 다운로드 비트레이트 속도 제한

API 요청 순서

  • Token API를 통하여 Token 획득(Basic Auth)
  • HTTP Header에 획등 한 Token을 포함하여 API 호출
  • Token 만료 시 재발급 하여 API 사용

REST API를 보호하려면?
모든 API는 적절한 인증 및 모니터링을 통해 보호되어야 합니다.
다음은 REST API를 보호하는 두 가지 주요 방법입니다.

  1. 인증 토큰
    인증 토큰은 사용자에게 API 호출을 수행할 수 있는 권한을 부여하는 데 사용됩니다. 인증 토큰은 사용자가 자신이 누구인지 확인하고 해당 특정 API 호출에 대한 액세스 권한이 있는지 확인합니다. 예를 들어, 이메일 서버에 로그인하면 이메일 클라이언트는 보안 액세스를 위해 인증 토큰을 사용합니다.

  2. API 키
    API 키는 API를 호출하는 프로그램 또는 애플리케이션을 확인합니다. 즉, 애플리케이션을 식별하고 애플리케이션에 특정 API 호출을 수행하는 데 필요한 액세스 권한이 있는지 확인합니다. API 키는 토큰만큼 안전하지 않지만 사용량에 대한 데이터를 수집하기 위해 API 모니터링을 허용합니다. 다른 웹 사이트를 방문할 때 브라우저 URL에서 긴 문자열과 숫자를 본 적이 있을 것입니다. 이 문자열은 웹 사이트가 내부 API 호출을 수행하는 데 사용하는 API 키입니다.

사용범위에 따른 API유형
1. 프라이빗 API
:프라이빗 API는 기업 내부에 있으며 비즈니스 내에서 시스템과 데이터를 연결하는 데만 사용됩니다.
2. 퍼블릭 API
퍼블릭 API는 일반에 공개되며 누구나 사용할 수 있습니다. 이러한 유형의 API와 관련된 권한 부여와 비용이 있을 수도 있고 없을 수도 있습니다.
3. 파트너 API
이는 B2B 파트너십을 지원하기 위해 권한이 부여된 외부 개발자만 액세스할 수 있습니다.
4. 복합 API
복합 API는 두 개 이상의 서로 다른 API를 결합하여 복잡한 시스템 요구 사항이나 동작을 처리합니다.


PHP는 MySQL에 연결하기 위한 다양한 API를 제공합니다.
아래에서는 mysqli 및 PDO 확장에서 제공하는 API를 보여줍니다.

예 #1 MySQL API 비교

query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL"); $row = $result->fetch_assoc(); echo htmlentities($row['_message']); // PDO $pdo = new PDO('mysql:host=example.com;dbname=database', 'user', 'password'); $statement = $pdo->query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL"); $row = $statement->fetch(PDO::FETCH_ASSOC); echo htmlentities($row['_message']); mysqli 사용방법 2가지 함수이용* 객체지향

0개의 댓글