본문 바로가기
development/IDE

Jetbrains .http 사용하기

by 프리(freefly) 2023. 1. 31.
반응형

들어가면서...

난 개발할 때 IDE 에서 거의 떠나지 않는 방식을 선호하는데 jetbrains 사의 IDE 들이 나의 이 요구사항을 아주 잘 만족해 준다.

웹 개발 할 때 필요한 것 중 하나가 http client 인데, 개발 중인 시스템에 쏴보든 외부 서비스에 쏴보든 해서 확인할 일이 많기 때문이다.

 

jetbrains 의 IDE 에서는 .http 파일을 통해서 http 통신 기능을 제공하며 이를 사용하여 코드로 http 호출 템플릿을 관리할 수 있다.

파일 생성

스크래치 파일과 물리 파일 두 가지 방식으로 생성이 가능한데 지금은 프로젝트에서 .http 파일을 관리한다는 가정에서 작성해 보겠다. 

참고로 스크래치 파일의 경우 IDE 로컬 환경에서 관리하며 호출 결과를 다시 확인할 수 있다.

우선 프로젝트 윈도우에서 new... 를 통해 http Request 파일을 선택하자

new... 로 http request 파일 생성

확장자는 .http 또는 .rest 두 가지가 가능하다.

이렇게 생성한 파일은 프로젝트에 내부에 유지하면서 공유가 가능하게 된다.

http 요청 작성하기

요청의 형태는 다음과 같다.

여기서는 jsonplaceholer  이용하여 요청을 작성해보자

위의 요청 형태대로 작성하면 다음과 같은 형태가 됨

요청 작성 예시

요청은 '###' 통해 나눠지게 되고 한칸 띄고 제목을 정할 수 있다.

참고로 GET 요청을 작성할 때는 특별하게 url 만 작성하는 것이 가능하다.

http 메서드가 없는 GET 요청

만약 요청 내용이 길어질 경우 여러 줄로 작성할 수 있고 앞에 스페이스 하나 붙여줘야 한다.

(첨언하자면 mac 에서는 .http 파일 내에서 tab 이 안 먹히는 듯함...)

http 요청 바디 설정

.http 는 content-type 에 따라 바디를 다르게 설정하도록 되어 있다.

json 요청의 경우 아래와 같이 설정해야 한다.

json 요청 바디 예시

만약 요청 내용이 길 경우 json 파일로 추출하여 사용이 가능하다.

이 경우 헤더 아래와 다음과 같이 작성해 줘야 한다.

< 로 시작하는 것에 주의

 

application/x-www-form-urlencoded 의 경우
multipart/form-data 의 경우

multipart/form-data 의 경우 좀 더 자세한 작성법은 다음을 참고 하자.

https://www.jetbrains.com/help/idea/exploring-http-syntax.html#use-multipart-form-data

 

요청제목 설정 주석

요청 제목은 2가지 방식으로 설정 가능하다.

요청 경계인 ### 옆으로 title 부여하거나

경계 아래에 # @name 요청명 또는 # @name=요청명 과 같이 작성할 수 있다.

이 때 @name 우선적으로 사용된다.

요청 이전에는 description 설정할 있으며 이 때 주석은 #, // 모 가능하다.

 

변수 사용하기

변수는 글로벌 변수, 지역 변수, 환경 변수, 동적 변수 가 존재하며 설정한 변수는 {{ }} 을 통해 접근할 수 있다. 

변수 사용 예시

글로벌 변수

전역 변수로 client.global.set(...) 을 통해 설정이 가능하다.

지역 변수 (intellij 2022.3 버전부터 지원)

지역 변수는 요청 이전에 설정해야 하며 request.variables.set(...) 을 통해 설정할 수 있다.

지역 변수 설정 예시

지역 변수 설정 블록에서는 http client crypto api 도 사용 가능하기 때문에 이를 이용하면 암호화된 헤더 값이나 변수를 쉽게 만들어낼 수 있어서 인증과 관련된 api 를 테스트할 때 매우 유용하다.

인증 api 요청 샘플

위에서 사용한 request 객체는 다음과 같은 변수 또는 메서드에 접근할 수 있으므로 참고하자.

  • body
  • environment
  • headers
  • url
  • variables

좀 더 자세한 정보는 다음을 참고하자.

https://www.jetbrains.com/help/idea/http-response-reference.html#request-properties

환경 변수

환경 설정 파일을 통해 주입된 변수로 .http 파일 당 설정할 수 있다. 

switch environment 메뉴를 통해 설정이 가능하다.

환경 변수에는 public, private 두 가지가 있으며 private 은 민감정보를 저장하는 파일로 반드시 .gitignore 에 포함시켜야 한다. 보통은 intellij 에서 빼주긴 하는데 그냥 수동으로 설정해주는 것이 좋다.

public, private 양쪽에 같은 변수가 등록될 경우 public 을 1차로 적용한 후 private 을 override 하는 방식으로 동작하게 된다. 

 

변수를 작성할 때는 환경 별로 작성할 수 있기 때문에 매우 유용하게 쓸 수 있다.

development 환경과 production 환경의 변수를 분리

동적 변수

매번 다른 값을 리턴해주는 변수로 client 자체에서 지원하는 변수다. 사실상 유틸리티처럼 쓰게 되므로 미리 알아 두는 것이 좋다.

  • $uuid, $random.uuid : uuid 반환
  • $timestamp, $isoTimestamp : unix timestamp 나 iso-8601(UTC) format의 timestamp 반환
  • $randomInt, $random.integera(from, to), $random.float(from, to), $random.alphabetic(length), $random.alphanumeric(length), $random.hexadecimal(length), $random.email
  • $exampleServer : websocket, graphql 에서 사용하는 변수값
  • $projectRoot : ./.idea
  • $historyFolder : ./.idea/httpRequests

쿠키 설정

쿠키는 'Cookie:' 를 통해 설정 가능하며 응답을 통해 저장된 쿠키는 .idea/httpRequests/http-client.cookies 라는 내부파일에 저장된다. (최대 300개 저장됨)

이렇게 저장된 쿠키는 일치하는 url에 대해 자동으로 설정되어 함께 전달되며 쿠키를 저장하지 않으려면 요청 보낼 때 description 의 주석으로 @no-cookie-jar 을 설정하면 된다.

// @no-cookie-jar
GET example.com

요청 실행 히스토리

요청을 실행하게 되면 자동으로 프로젝트의 ./.idea/httpRequests/ 에 히스토리가 쌓이게 되며 히스토리를 쌓고 싶지 않으면 @no-log 를 추가해 주면 된다.

저장된 히스토리의 예시

원한다면 히스토리를 지정한 파일에 쌓는 것도 가능하다.

 

리다이렉션 중지

요청 서버의 라우팅에 대해 리다이렉션이 설정되어 있을 때 http client 의 기본동작은 리다이렉션된 페이지의 응답값을 가져오는 것이다. 이런 자동 리다이렉션을 하지 않고 싶으면 @no-redirect 를 설정해 주면 된다.

client 객체

.http 는 javascript 기반으로 동작한다. 전역으로 생성된 client 객체는 세션 메타데이터 정보를 가지고 있어서 전역 변수 접근, 테스트 등의 기능을 수행할 수 있다.

사용 가능한 메서드와 변수는 다음과 같다.

 

client.global : 글로벌 변수 지정 및 확인

  • set
  • get
  • isEmpty
  • clear
  • clearAll

메서드

  • test : 테스트 블록을 생성
  • assert : 조건을 통한 assertion 수행
  • log
  • exit

요청 작성 지원 기능

live template

.http 도 IDE 의 기능인 live template 지원하며 이를 통해 빠르게 요청을 생성할 수 있다. 

http request collections

intellij 미리 만들어둔 샘플 요청을 제공하며 왼쪽 상단의 examples 에서 확인할 수 있다.

요청 자동 생성 기능 제공

json, yaml, toml, properteis 파일에 설정된 스트링이 http, https 시작하는 경우 context menu 에서 즉시 request 생성하는 기능을 제공한다. 

cUrl 컨버팅 지원

cUrl 대한 컨버트 기능을 지원하기 때문에 복사해서 즉시 붙여서 사용할 있다.

지원되는 옵션은 다음을 확인해보자.

https://www.jetbrains.com/help/idea/http-client-in-product-code-editor.html#converting-curl-requests

 

요청에 대한 응답 다루기

.http 는 요청의 응답을 다룰 있도록 스크립트를 작성할 있으며 응답값을 저장, 테스트할 있도록 프로그래밍적으로 처리가 가능하다. 

이는 2 가지 방식으로 설정 가능한데 요청 하단에 직접 넣거나

>&nbsp; 로 시작하여 {% %} 로 감싸야함

스크립트 파일을 불러오는 방식을 사용할 수 있다.

파일 작성할 때는 파일의 context-menu 에서 use javascript library > http reseponse handler 를 선택하여 작성

스크립트 작성

.http 는 http response handler 라이브러리를 통해 동작하게 되기 때문에 javascript로 작성할 수 있으며 작성할 때는 요청라인에서 한줄 띄우고 작성하자.

응답 처리 예시

세션 메타데이터 정보를 client 라는 객체를 통해 접근할 수 있고 intellij 종료할 때까지 유지되며 모든 전역 변수는 client.global 에 저장된다.

variable_name 변수는 {{ variable_name }} 형태로 접근 가능하다.

 

response 객체를 통해 응답 정보에 접근할 수 있고 만약 test 가 작성되었으면 run 탭을 통해 확인이 가능하다.

response 객체

응답 데이터를 가진 객체로 다음과 같은 정보에 접근이 가능하다.

  • body
  • headers
  • status
  • contentType

response 객체를 이용하면 회원가입이나 로그인 같은 일련의 절차가 필요한 api 에 대한 테스트도 수행할 수 있다.

인증을 통해 &nbsp;token&nbsp; 값을 받아온 후 Authorization 에 세팅 하여 인가를 시도

 

이제 프로젝트에서 .http 를 관리해서 매번 복잡한 호출 코드를 작성하는 일을 줄여보자!

 

참고

 

반응형

댓글