ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • API
    IT 기본상식/개념 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 (데이터 손상을 줄여줌)

     

     

    연관 포스트

    [테스팅 관련/테스트] - API 테스트

     

    API 테스트

    소프트웨어 테스트 유형 중 하나인, API 테스트 API를 직접 테스트 통합테스트(Integration testing)의 일부로서, API가 기능성, 안정성, 성능 및 보안에 대한 기대를 충족시키는지에 대해 확인 API 테스트

    dev-test-hqsw.tistory.com

     

     

    'IT 기본상식 > 개념' 카테고리의 다른 글

    인터페이스  (0) 2020.09.09
Designed by Tistory.