-
APIIT 기본상식/개념 2020. 9. 10. 02:20
소프트웨어 인터페이스 종류 중 하나인,
API
Application Programming Inteface
운영체제와 응용프로그램 사이의 통신에 사용되는 언어나 메시지 형식
응용프로그램이 운영체제의 특정 기능을 호출하는 함수의 집합
응용프로그램에서 사용할 수 있도록, 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스
여러가지 정의가 있다.
대학교 때, '모바일 프로그래밍' 수업에서 안드로이드 앱을 만드는 프로젝트를 한 적이 있다.
나는 여행 관련 어플을 선택하였고,
여러 공항의 비행기 출발/도착 시간 데이터를 사용하고 싶었다.
그러기 위해서는, 공항 제공 API를 끌어다 써야했다.
이를 참고하여 나만의 정의를 내린다면,
API는 응용프로그램이 데이터(또는 기능, 프로그램)를 유용/편리하게 사용할 수 있도록 제공된 '중간 매개체'라고 생각하면 될 것같다.
프로그램 개발에 있어 Building Block을 제공하여, 프로그래머는 Block을 합치기만 하면 된다!
API 구축 방법에는 대표적으로 2가지가 있다.
REST & SOAP
REST(Representational State Transfer)
- 네트워크를 통해서 컴퓨터들끼리 통신할 수 있게 해주는 아키텍처 스타일
- 웹 서비스와 모바일 애플리케이션 경량화의 필요에 맞춘 아키텍처 원칙 세트
- WWW(World Wide Web)와 같은 분산 시스템을 위해 디자인된 소프트웨어 아키텍처 스타일
HTTP를 통해 데이터 요청 → RESTful API 또는 웹서비스 → HTML, XML, txt, JSON 형식 메시지 반환
▷ URI(Uniform Resource Identifier)와 HTTP(Hypertext Transfer Protocol)를 기반으로, 브라우저 간 호환성이 좋은 JSON을 데이터 포맷으로 사용
▷ 구축과 확장이 간단 but, 크고 복잡하게 만들 수 있음 (유연한 구현 제공)
▷ 클라이언트 - 서버 간의 통신과 아키텍처를 가능하게 함
▷ 단일 인터페이스 사용 (동일한 경로 접속, 단순 방식)
▷ 웹에 최적화, 성능과 확장성이 뛰어남 (but, 그 자체의 기능이 정지되거나 프로그램이 먹통될 수 있음)
▷ 정보를 리소스 레벨에서 읽고/쓰기에 최적 (sns 프로필, 온라인 사진, 온라인 데이터 읽기/전송, 서버/데이터베이스 정보 읽기, 정보 정렬)
▷ 경량화되어있기에, 사물인터넷(IoT), 모바일 애플리케이션 개발, 서버리스(serverless) 컴퓨팅에 이상적 (+ 대부분의 퍼블릭 API)
ex) 요청
GET http://www.catechizeme.com/catechisms/catechism_for_young_children/daily_question.js HTTP/1.1 Accept-Encoding: gzip,deflate Host: www.catechizeme.com Connection: Keep-Alive User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
ex) 응답
HTTP/1.1 200 OK Date: Fri, 22 Nov 2013 22:32:22 GMT Server: Apache X-Powered-By: Phusion Passenger (mod_rails/mod_rack) 3.0.17 ETag: "b8a7ef8b4b282a70d1b64ea5e79072df" X-Runtime: 13 Cache-Control: private, max-age=0, must-revalidate Content-Length: 209 Status: 200 Keep-Alive: timeout=2, max=100 Connection: Keep-Alive Content-Type: js; charset=utf-8 { "link": "catechisms\/catechism_for_young_children\/questions\/36", "catechism": "Catechism for Young Children", "a": "Original sin.", "position": 36, "q": " What is that sinful nature which we inherit from Adam called?" }
SOAP(Simple Object Access Protocol)
- 다른 언어로 다른 플랫폼에서 빌드된 애플리케이션이 통신할 수 있도록 설계된 최초의 표준 프로토콜
HTTP(웹 브라우저), SMTP(이메일), TCP 등의 다양한 애플리케이션 레이어 프로토콜을 통해 데이터 요청 → SOAP API → XML 형식 메시지 반환
▷ 프로토콜로서 복잡성과 오버헤드를 증가시키는 빌트인 룰을 적용하여, 페이지 로드 시간이 길어짐
▷ 빌트인 컴플라이언스를 제공하므로, 보안과 안정적인 데이터베이스 트랜잭션의 기본 속성인 원자성, 일관성, 격리성, 내구성(Atomicity, Consistency, Isolation and Durability, ACID)이 포함
▷ 보안 수준 엄격(SSL 지원 및 WS-Security), 무거운 경향 (기본 보안 + 트랜잭션 컴플라이언스)
▷ 성공/반복 실행 로직이 규정되어 있어, 신뢰성 제공
▷ ACID 준수하기때문에 데이터의 무결성/일관성을 지켜줌
▷ 은행용 모바일 앱(높은 보안 수준), 신뢰할 수 있는 메시징 앱, 기업용 애플리케이션 작업에 적합
ex) 클라이언트로부터 요청
POST http://www.stgregorioschurchdc.org/cgi/websvccal.cgi HTTP/1.1 Accept-Encoding: gzip,deflate Content-Type: text/xml;charset=UTF-8 SOAPAction: "http://www.stgregorioschurchdc.org/Calendar#easter_date" Content-Length: 479 Host: www.stgregorioschurchdc.org Connection: Keep-Alive User-Agent: Apache-HttpClient/4.1.1 (java 1.5) <?xml version="1.0"?> <soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cal="http://www.stgregorioschurchdc.org/Calendar"> <soapenv:Header/> <soapenv:Body> <cal:easter_date soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <year xsi:type="xsd:short">2014</year> </cal:easter_date> </soapenv:Body> </soapenv:Envelope>
ex) 서비스로부터 응답
HTTP/1.1 200 OK Date: Fri, 22 Nov 2013 21:09:44 GMT Server: Apache/2.0.52 (Red Hat) SOAPServer: SOAP::Lite/Perl/0.52 Content-Length: 566 Connection: close Content-Type: text/xml; charset=utf-8 <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <namesp1:easter_dateResponse xmlns:namesp1="http://www.stgregorioschurchdc.org/Calendar"> <s-gensym3 xsi:type="xsd:string">2014/04/20</s-gensym3> </namesp1:easter_dateResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
REST SOAP 유형 아키텍처 스타일 프로토콜 기능 데이터 위주: 데이터를 위해 리소스에 접근 기능 위주: 구조화된 정보 전송 데이터 포맷 JSON, HTML, txt, XML 등 다양한 포맷 XML 보안 SSL, HTTPS SSL, WS-Security 대역폭 리소스 ↓ 무게 ↓ 리소스 ↑ 무게 ↑ 데이터 캐시 캐시 사용 O 캐시 사용 X 특성 Stateless (독립적 - 상호작용 정보 저장 X) Stateful (상호작용 상태 관리 - 지속적 저장) 페이로드 처리 미리 알릴 필요 X 통신 규약 엄격, 모든 메시지는 전송 전에 알림 ACID 준수 X O (데이터 손상을 줄여줌) 연관 포스트