1. 개요

이 기사에서는 Spring REST Shell과 일부 기능을 살펴 보겠습니다.

Spring Shell 확장이므로 먼저 읽어 보는 것이 좋습니다 .

2. 소개

Spring REST Shell은 Spring HATEOAS 호환 REST 리소스 작업을 용이하게하도록 설계된 명령 줄 셸입니다.

더 이상 curl 과 같은 도구를 사용하여 bash에서 URL을 조작 할 필요가 없습니다 . Spring REST Shell은 REST 리소스와 상호 작용하는보다 편리한 방법을 제공합니다.

3. 설치

Homebrew와 함께 macOS 컴퓨터를 사용하는 경우 다음 명령을 간단히 실행할 수 있습니다.

brew install rest-shell

다른 운영 체제 사용자의 경우 공식 GitHub 프로젝트 페이지 에서 바이너리 패키지를 다운로드하고 패키지의 압축을 풀고 실행할 실행 파일을 찾아야합니다.

tar -zxvf rest-shell-1.2.0.RELEASE.tar.gz
cd rest-shell-1.2.0.RELEASE
bin/rest-shell

또 다른 옵션은 소스 코드를 다운로드하고 Gradle 작업을 수행하는 것입니다.

git clone git://github.com/spring-projects/rest-shell.git
cd rest-shell
./gradlew installApp
cd build/install/rest-shell-1.2.0.RELEASE
bin/rest-shell

모든 것이 올바르게 설정되면 다음 인사말이 표시됩니다.

 ___ ___  __ _____  __  _  _     _ _  __    
| _ \ __/' _/_   _/' _/| || |   / / | \ \   
| v / _|`._`. | | `._`.| >< |  / / /   > >  
|_|_\___|___/ |_| |___/|_||_| |_/_/   /_/   
1.2.1.RELEASE

Welcome to the REST shell. For assistance hit TAB or type "help".
http://localhost:8080:>

4. 시작하기

다른 기사를 위해 이미 개발 된 API로 작업 할 것 입니다. 로컬 호스트 : 8080은 기본 URL로 사용됩니다.

다음은 노출 된 엔드 포인트 List입니다.

  • GET / 기사 - 모든 얻을 기사
  • GET은 / 기사 / {ID는} - 얻을 ID로를
  • GET / articles / search / findByTitle? title = {title}제목별로 기사 가져 오기
  • GET / profile / articles – 기사 리소스에 대한 프로필 데이터 가져 오기
  • POST / 기사 - 새로운 만들 기사 제공 몸을

기사 : 클래스는 세 개의 필드가 ID, 제목내용.

4.1. 새 리소스 생성

새 기사를 추가합시다. 우리가 사용하는거야 포스트 JSON 통과 명령 문자열을- 데이터 매개 변수를 .

먼저 추가하려는 리소스와 관련된 URL 따라야 합니다. 명령 팔로우 함께 연결 한 상대 URI를 얻어 기저 URI 현재 위치와 같은 결과를 설정

http://localhost:8080:> follow articles
http://localhost:8080/articles:> post --data "{title: "First Article"}"

명령 실행 결과는 다음과 같습니다.

< 201 CREATED
< Location: http://localhost:8080/articles/1
< Content-Type: application/hal+json;charset=UTF-8
< Transfer-Encoding: chunked
< Date: Sun, 29 Oct 2017 23:04:43 GMT
< 
{
  "title" : "First Article",
  "content" : null,
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/articles/1"
    },
    "article" : {
      "href" : "http://localhost:8080/articles/1"
    }
  }
}

4.2. 자원 발견

이제 리소스가 확보되면 찾아 보겠습니다. 우리가 사용하는거야 (가) 발견 현재 URI의 모든 자원을 밝혀 명령을 :

http://localhost:8080/articles:> discover

rel        href                                  
=================================================
self       http://localhost:8080/articles/       
profile    http://localhost:8080/profile/articles
article    http://localhost:8080/articles/1

리소스 URI를 알고 있으므로 get 명령 을 사용하여 가져올 수 있습니다 .

http://localhost:8080/articles:> get 1

> GET http://localhost:8080/articles/1

< 200 OK
< Content-Type: application/hal+json;charset=UTF-8
< Transfer-Encoding: chunked
< Date: Sun, 29 Oct 2017 23:25:36 GMT
< 
{
  "title" : "First Article",
  "content" : null,
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/articles/1"
    },
    "article" : {
      "href" : "http://localhost:8080/articles/1"
    }
  }
}

4.3. 쿼리 매개 변수 추가

–params 매개 변수를 사용하여 쿼리 매개 변수를 JSON 조각으로 지정할 수 있습니다 .

주어진 제목으로 기사를 봅시다 :

http://localhost:8080/articles:> get search/findByTitle \
> --params "{title: "First Article"}"

> GET http://localhost:8080/articles/search/findByTitle?title=First+Article

< 200 OK
< Content-Type: application/hal+json;charset=UTF-8
< Transfer-Encoding: chunked
< Date: Sun, 29 Oct 2017 23:39:39 GMT
< 
{
  "title" : "First Article",
  "content" : null,
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/articles/1"
    },
    "article" : {
      "href" : "http://localhost:8080/articles/1"
    }
  }
}

4.4. 헤더 설정

headers 라는 명령을 사용하면 세션 범위 내에서 헤더를 관리 할 수 있습니다. 모든 요청은 이러한 헤더를 사용하여 전송됩니다. 헤더 세트는 소요 -name- 값 헤더를 결정하기 위해 인수를.

몇 가지 헤더를 추가하고 해당 헤더를 포함하여 요청합니다.

http://localhost:8080/articles:>
  headers set --name Accept --value application/json

{
  "Accept" : "application/json"
}

http://localhost:8080/articles:>
  headers set --name Content-Type --value application/json

{
  "Accept" : "application/json",
  "Content-Type" : "application/json"
}

http://localhost:8080/articles:> get 1

> GET http://localhost:8080/articles/1
> Accept: application/json
> Content-Type: application/json

4.5. 파일에 결과 쓰기

HTTP 요청 결과를 화면에 출력하는 것이 항상 바람직하지는 않습니다. 때로는 추가 분석을 위해 결과를 파일에 저장해야합니다.

- 출력 파라미터는 이러한 동작을 수행 허용 :

http://localhost:8080/articles:> get search/findByTitle \
> --params "{title: "First Article"}" \
> --output first_article.txt

>> first_article.txt

4.6. 파일에서 JSON 읽기

종종 JSON 데이터는 –data 매개 변수를 사용하여 콘솔을 통해 입력하기에는 너무 크거나 너무 복잡합니다 .

또한 명령 줄에 직접 입력 할 수있는 JSON 데이터 형식에는 몇 가지 제한 사항이 있습니다.

-from의 매개 변수는 파일 또는 디렉토리에서 데이터를 읽을 수있는 가능성을 제공합니다.

값이 디렉토리 인 경우 쉘은 ".json"으로 끝나는 각 파일을 읽고 해당 파일 의 내용으로 POST 또는 PUT를 수행합니다.

매개 변수가 파일이면 쉘은 해당 파일에서 파일과 POST / PUT 데이터를로드합니다.

second_article.txt 파일에서 다음 기사를 만들어 보겠습니다 .

http://localhost:8080/articles:> post --from second_article.txt

1 files uploaded to the server using POST

4.7. 컨텍스트 변수 설정

현재 세션 컨텍스트 내에서 변수를 정의 할 수도 있습니다. var 명령 각각 변수를 가져오고 설정하기위한 getset 매개 변수를 정의합니다 .

헤더 와 유사하게 –name–value 인수 는 새 변수의 이름과 값을 제공하기위한 것입니다.

http://localhost:8080:> var set --name articlesURI --value articles
http://localhost:8080/articles:> var get --name articlesURI

articles

이제 컨텍스트 내에서 현재 사용 가능한 변수 List을 인쇄합니다.

http://localhost:8080:> var list

{
  "articlesURI" : "articles"
}

변수가 저장되었는지 확인한 후 다음 명령 과 함께 사용 하여 주어진 URI로 전환합니다.

http://localhost:8080:> follow #{articlesURI}
http://localhost:8080/articles:> 

4.8. 역사보기

우리가 방문하는 모든 경로가 기록됩니다. 명령 기록 은 다음 경로를 시간순으로 표시합니다 .

http://localhost:8080:> history list

1: http://localhost:8080/articles
2: http://localhost:8080

각 URI는 해당 URI로 이동하는 데 사용할 수있는 번호와 연결됩니다.

http://localhost:8080:> history go 1
http://localhost:8080/articles:>

5. 결론

이 튜토리얼에서 우리는 Spring 생태계에서 흥미롭고 드문 도구 인 명령 줄 도구에 초점을 맞추 었습니다.

GitHub 에서 프로젝트 대한 자세한 정보를 찾을 수 있습니다 .

그리고 항상 그렇듯이 기사에 언급 된 모든 코드 스 니펫은 저장소 에서 찾을 수 있습니다 .