웹 API

[섬네일|[미국 항공 우주국(NASA)가 작성한 웹 API 문서의 스크린샷]]
**웹 API**(Web API)는 웹 서버나 웹 브라우저를 위한 API이다. 웹 개발 개념으로서 이는 웹 애플리케이션의 클라이언트 사이드(사용 중인 모든 웹 프레임워크 포함)과 관련될 수 있다. 서버 사이드 웹 API는 일반적으로 HTTP 기반 웹 서버를 통해 JSON 또는 XML로 표현되는 정의된 요청-응답 메시지 시스템에 공개적으로 노출된 하나 이상의 엔드포인트로 구성된다. 서버 API(SAPI)는 원격 웹 애플리케이션에서 공개적으로 액세스할 수 없는 한 서버 사이드 웹 API로 간주되지 않는다.

## 클라이언트 사이드
클라이언트 사이드 웹 API는 웹 브라우저 또는 기타 HTTP 클라이언트 내에서 기능을 확장하는 프로그래밍 방식의 인터페이스이다. 원래 이들은 기본 플러그인 브라우저 확장의 형태로 가장 일반적으로 사용되었지만 대부분의 최신 확장은 표준화된 자바스크립트 바인딩을 대상으로 한다.

모질라 재단은 기본 모바일 애플리케이션을 HTML5 애플리케이션으로 대체하도록 설계된 WebAPI 사양을 만들었다.

구글은 안전하지 않은 기본 플러그인을 안전한 기본 샌드박스 확장 프로그램 및 애플리케이션으로 대체하도록 설계된 네이티브 클라이언트 아키텍처를 만들었다. 구글은 또한 수정된 LLVM AOT 컴파일러를 사용하여 이것을 이식 가능하게 만들었다.

## 서버 사이드
서버 사이드 웹 API는 일반적으로 JSON 또는 XML로 표현되는 정의된 요청-응답 메시지 시스템에 공개적으로 노출된 하나 이상의 엔드포인트로 구성된다. 웹 API는 HTTP 기반 웹 서버를 통해 가장 일반적으로 노출된다.

매시업은 여러 서버 사이드 웹 API의 사용을 결합하는 웹 애플리케이션이다. 웹후크는 원격 명명 파이프 또는 콜백 유형처럼 사용하도록 설계된 URI로 입력을 취하는 서버 사이드 웹 API이다. 따라서 서버는 제공된 URI를 역참조하고 트리거하는 클라이언트 역할을 한다. 이 이벤트를 처리하여 일종의 P2P IPC를 제공하는 다른 서버의 이벤트이다.

### 엔드포인트
엔드포인트는 서버 측 웹 API와 상호 작용하는 데 중요한 요소로, 타사 소프트웨어가 리소스에 액세스할 수 있는 위치를 지정한다. 일반적으로 액세스는 URI를 통해 이루어지며, HTTP 요청이 게시되고 응답이 예상된다. 웹 API는 공개 또는 비공개가 될 수 있으며, 후자는 액세스 토큰을 필요로 한다.

엔드포인트는 정적이어야 한다. 그렇지 않으면 엔드포인트와 상호 작용하는 소프트웨어의 올바른 작동을 보장할 수 없다. 리소스의 위치가 변경되면(그리고 엔드포인트도 변경되면) 이전에 작성된 소프트웨어는 필요한 리소스를 더 이상 같은 위치에서 찾을 수 없으므로 오작동하게 된다. API 제공업체는 여전히 웹 API를 업데이트하기를 원하므로, 많은 업체가 엔드포인트를 가리키는 URI에 버전 관리 시스템을 도입했다.

### 리소스 대 서비스
웹 2.0 웹 API는 종종 REST 및 SOAP와 같은 기계 기반 상호 작용을 사용한다. RESTful 웹 API는 HTTP 메서드를 사용하여 URL 인코딩된 매개변수를 통해 리소스에 액세스하고, JSON 또는 XML을 사용하여 데이터를 전송한다. 대조적으로, SOAP 프로토콜은 W3C에 의해 표준화되었으며 일반적으로 HTTP를 통해 XML을 페이로드 형식으로 사용하도록 의무화한다. 또한, SOAP 기반 웹 API는 웹 서비스 기술 언어 문서와 함께 제공되는 XML 스키마를 활용하여 XML 유효성 검사를 사용하여 구조적 메시지 무결성을 보장한다. 웹 서비스 기술 언어 문서는 웹 서비스의 XML 메시지와 전송 바인딩을 정확하게 정의한다.

### 문서화
서버 측 웹 API는 외부 세계가 비즈니스 로직과 상호 작용하기 위한 인터페이스다. 많은 회사에게 이 내부 비즈니스 로직과 관련된 지적 재산은 다른 회사와 차별화되는 요소이며, 잠재적으로 경쟁 우위를 제공하는 요소다. 이들은 이 정보가 노출되는 것을 원하지 않는다. 그러나 고품질의 웹 API를 제공하기 위해서는 충분한 수준의 문서화가 필요하다. 문서화를 제공할 뿐만 아니라 오류 메시지에서도 문서에 연결하는 API 제공업체 중 하나는 트윌리오다.

그러나 현재는 인기 있는 문서화된 서버 측 웹 API 디렉터리들이 있다.

### 성장과 영향
사용 가능한 웹 API의 수는 지난 몇 년간 꾸준히 증가했다. 기업들은 모든 개발자가 상호 작용할 수 있는 개방형 플랫폼을 운영하는 것과 관련된 성장 기회를 인식하고 있기 때문이다. 프로그래머블웹은 2005년 105개에서 2022년 24000개 이상의 웹 API를 추적했다.

웹 API는 보편화되었다. 어떤 형태의 웹 API도 제공하지 않는 주요 소프트웨어 애플리케이션/서비스는 거의 없다. 이러한 웹 API와 상호 작용하는 가장 일반적인 형태 중 하나는 트윗, 페이스북 댓글, 유튜브 동영상 등 외부 리소스를 삽입하는 것이다. 사실, 디스커스와 같이 기능이 풍부한 댓글 시스템과 같은 삽입 가능한 도구를 제공하는 것을 주요 서비스로 하는 매우 성공적인 회사들도 있다. 알렉사 인터넷 순위 상위 100위 웹사이트 중 어떤 웹사이트라도 API를 사용하거나 자체 API를 제공하는데, 이는 웹 API 전체의 엄청난 규모와 영향을 보여주는 매우 뚜렷한 지표이다.

사용 가능한 웹 API의 수가 증가함에 따라, 더 정교한 검색 및 발견을 제공하기 위해 오픈 소스 도구들이 개발되었다. APIs.json은 API와 그 작업을 기계 판독 가능한 형식으로 설명하며, 관련 프로젝트인 APIs.io는 APIs.json 메타데이터 형식을 기반으로 검색 가능한 API 공개 목록을 제공한다.

### 비즈니스

#### 상업적
많은 기업과 조직은 핵심 비즈니스 고객에게 서비스를 제공하기 위해 웹 API 인프라에 크게 의존한다. 2014년에 넷플릭스는 약 50억 건의 API 요청을 받았으며, 대부분은 사설 API 내에서 이루어졌다.

#### 정부
많은 정부는 많은 데이터를 수집하며, 일부 정부는 이제 이 데이터에 대한 접근을 개방하고 있다. 이 데이터가 일반적으로 접근 가능하게 되는 인터페이스는 웹 API다. 웹 API는 "예산, 공공 사업, 범죄, 법률 및 기타 기관 데이터"와 같은 데이터를 모든 개발자가 편리하게 접근할 수 있도록 한다.

## 예시

인기 있는 웹 API의 예로는 NASA에서 운영하는 Astronomy Picture of the Day API가 있다. 이 API는 우주 사진이나 천문학자에게 흥미로운 다른 이미지, 그리고 이미지에 대한 메타데이터를 검색하는 데 사용되는 서버 측 API다.

API 문서에 따르면, 이 API에는 하나의 엔드포인트가 있다:
 https://api.nasa.gov/planetary/apod

문서에는 이 엔드포인트가 GET 요청을 허용한다고 명시되어 있다. 사용자로부터 API 키라는 하나의 필수 정보를 필요로 하며, 여러 다른 선택적 정보를 허용한다. 이러한 정보는 매개변수라고 알려져 있다. 이 API의 매개변수는 쿼리 문자열이라는 형식으로 작성되며, 엔드포인트와 물음표 문자(`?`)로 구분된다. 앰퍼샌드(`&amp;`)는 쿼리 문자열에서 매개변수를 서로 구분한다. 엔드포인트와 쿼리 문자열은 함께 URL을 형성하여 API가 어떻게 응답할지 결정한다. 이 URL은 쿼리 또는 API 호출이라고도 알려져 있다.

아래 예시에서 두 개의 매개변수가 쿼리 문자열을 통해 API로 전송(또는 전달)된다. 첫 번째는 필수 API 키이고 두 번째는 선택적 매개변수이다. 요청된 사진의 날짜이다.
 https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY&date=1996-12-03

웹 브라우저에서 위 URL을 방문하면 GET 요청이 시작되어 API를 호출하고 사용자에게 반환 값 또는 반환이라고 알려진 결과를 보여준다. 이 API는 컴퓨터가 이해하도록 고안된 데이터 형식인 JSON을 반환하지만, 사람이 읽기에도 다소 쉽다. 이 경우 JSON은 백색 왜성 사진에 대한 정보를 포함한다.


```json
{
  "date":"1996-12-03",
  "explanation":"Like a butterfly,\r a white dwarf star begins its life\r by casting off a cocoon that enclosed its former self. In this\r analogy, however, the Sun would be\r a caterpillar\r and the ejected shell of gas would become the prettiest of all!\r The above cocoon, the planetary nebula\r designated NGC 2440, contains one of the hottest white dwarf stars known.\r The white dwarf can be seen as the bright dot near the photo's\r center. Our Sun will eventually become a \"white dwarf butterfly\",\r but not for another 5 billion years. The above false color image recently entered the public domain\r and was post-processed by F. Hamilton.\r",
  "hdurl":"https://apod.nasa.gov/apod/image/9612/ngc2440_hst2_big.jpg",
  "media_type":"image",
  "service_version":"v1",
  "title":"Cocoon of a New White Dwarf\r\nCredit:",
  "url":"https://apod.nasa.gov/apod/image/9612/ngc2440_hst2.jpg"
}
```


위 API 반환은 JSON 데이터 항목의 이름(키라고 함)이 각 줄의 시작 부분에 나타나도록 다시 포맷되었다. 이 키들 중 마지막에 있는 `url`이라는 키는 사진을 가리키는 URL을 나타낸다.
 https://apod.nasa.gov/apod/image/9612/ngc2440_hst2.jpg

위 URL을 따라가면 웹 브라우저 사용자는 이 사진을 볼 수 있다.

새로운 백색 왜성의 고치

이 API는 웹 브라우저를 사용하는 최종 사용자가 호출할 수 있지만(이 예시에서처럼), 소프트웨어에 의해 자동으로 호출되거나 소프트웨어를 작성하는 컴퓨터 프로그래머에 의해 호출되도록 의도되었다. JSON은 컴퓨터 프로그램에 의해 파싱되도록 의도되었으며, 이는 사진의 URL 및 기타 메타데이터를 추출한다. 결과 사진은 웹사이트에 삽입되거나, 문자 메시지로 자동 전송되거나, 소프트웨어 개발자가 상상하는 다른 목적으로 사용될 수 있다.

## 같이 보기
* 동적 웹페이지
* REST
* GraphQL
* 웹 서비스

## 각주


분류:소프트웨어 구조
분류:웹 개발
분류:API
분류:웹 2.0 신조어