# 4.1 REST API

&#x20; Elasticsearch는 http 프로토콜로 접근이 가능한 REST API를 지원합니다. 자원별로 고유 URL로 접근이 가능하며 http 메서드 PUT, POST, GET, DELETE 를 이용해서 자원을 처리합니다. 이런 특성을 가진 시스템을 보통 **RESTFul** 한 시스템이라고 말합니다.

&#x20; REST API가 익숙치 않은 분들을 위해 간단한 비교 설명을 드리면 다음과 같습니다. 사용자 정보를 다루는 **user.com** 이라는 시스템이 있다고 가정하고 **name=kim, age=38, gender=m** 이라는 사용자 정보를 처리한다고 해 보겠습니다. REST를 지원하지 않는 시스템에서는 보통 다음과 같이 각 가능에 대한 개별 페이지로 접근하거나 명령을 매개변수로 처리합니다.

#### RESTFul 하지 않은 시스템에서의 데이터 처리

* 입력 : `http://user.com/input.jsp?name=kim&age=38&gender=m`
* 조회 : `http://user.com/get.jsp?name=kim`
* 삭제 : `http://user.com/delete.jsp?name=kim`

&#x20; REST API를 지원하는 시스템은 kim 이라는 사용자에 대해 항상 단일 URL로 접근을 하고 **PUT, GET, DELETE** 같은 http 메서드로 데이터를 처리합니다

#### RESTFul 한 시스템에서의 데이터 처리

* 입력 : `PUT http://user.com/kim -d {"name":"kim", "age":38, "gender":"m"}`
* 조회 : `GET http://user.com/kim`
* 삭제 : `DELETE http://user.com/kim`

### 유닉스 curl

&#x20; MacOS, 리눅스와 같은 유닉스 기반 운영체제에서는 `curl` 명령어로 간편하게 REST API 사용이 가능합니다. Elasticsearch를 실행한 뒤 curl 명령을 이용해서 elasticsearch 클러스터의 최상위 경로를 호출하며 다음과 같이 클러스터의 상태 정보가 json 형식으로 리턴됩니다.

{% code title="GET 메서드로 elasticsearch 클러스터 조회" %}

```bash
$ curl -XGET "http://localhost:9200"
{
  "name" : "Jongminui-MacBook-Pro.local",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "hpmT8TPiR1Kk69YNao9V3w",
  "version" : {
    "number" : "7.3.0",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "de777fa",
    "build_date" : "2019-07-24T18:30:11.767338Z",
    "build_snapshot" : false,
    "lucene_version" : "8.1.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}
```

{% endcode %}

&#x20; 리턴된 결과는 노드명, 클러스터명, Elasticsearch 버전, 루씬 버전 등의 정보들을 담고 있습니다.

### Kibana Dev Tools

&#x20; Rest API를 쉽게 사용하기 위해서는 [포스트맨](https://www.getpostman.com) 같은 도구를 사용할 수 있습니다. Kibana에는 elasticsearch 에서 REST API를 간편하게 실행할 수 있는 **Dev Tools** 라는 도구를 제공합니다.

&#x20; 먼저 Kibana를 실행하기 위해서는 Elastic 홈페이지 (<https://www.elastic.co>)에서 운영체제별로 맞는 Kibana 버전을 내려받아 압축을 풀고 `bin/kibana` 또는 `bin/kibana.bat` (윈도우즈) 를 실행시키면 디폴트로 같은 호스트의 **localhost:9200** 에서 실행중인 elasticsearch와 통신하며 실행이 됩니다.

&#x20; Elasticsearch와 Kibana가 서로 다른 호스트에서 실행되고 있거나 통신 포트가 9200이 아니면 Kibana 홈 config 디렉토리 아래에 있는 `kibana.yml` 파일에서 `elasticsearch.url: "http://localhost:9200"` 옵션을 설정하면 됩니다. 기본적으로 Kibana는 5601 포트에서 실행이 되며 변경하고 싶으면 `server.port: 5601` 을 변경하고 싶은 포트 값으로 설정합니다.

&#x20; Kibana를 실행한 뒤 웹 브라우저를 열고 <http://localhost:5601> 로 접속하면 Kibana를 바로 사용할 수 있습니다. Kibana Dev Tools는 쿼리의 자동 완성도 되고 호스트 경로도 별도로 입력할 필요가 없습니다. 그리고 Dev Tools 에서 입력한 명령을 curl 명령으로 변환하여 클립보드에 복사하는 것도 가능합니다.

![Kibana 의 Dev Tools 메뉴](https://2678746270-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ln04DaYZaDjdiR_ZsKo%2F-LnUzV36FUbNFk6kTnaq%2F-LnLrv51XtgjeClkQ9yl%2Fimage.png?alt=media\&token=279ccbcd-03e2-455c-83e2-da88244bfb64)
