반응형

DemoController

@RestController
public class DemoController {
    @GetMapping("/api/demo")
    public Map<String, Object> getDemo(
        @RequestHeader(required = false) Map<String, Object> headers,
        @RequestParam(required = false) Map<String, Object> params
    ) {
        return Map.of(
            "headers", headers,
            "params", params
        );
    }

    @PostMapping("/api/demo")
    public Map<String, Object> postDemo(
        @RequestHeader(required = false) Map<String, Object> headers,
        @RequestParam(required = false) Map<String, Object> params,
        @RequestBody(required = false) String body
    ) {
        return Map.of(
            "headers", headers,
            "params", params,
            "body", body
        );
    }
}

GET 요청

./http/test.http

### GET 요청
GET http://localhost:8080/api/demo?key1=Hello&key2=World
TX-ID: TX-0001
Cookie: key1=value1; key2=value2

response

http://localhost:8080/api/demo?key1=Hello&key2=World

HTTP/1.1 200 
Content-Type: application/json
Transfer-Encoding: chunked
Date: Sat, 27 Aug 2022 02:40:58 GMT
Keep-Alive: timeout=60
Connection: keep-alive

{
  "headers": {
    "tx-id": "TX-0001",
    "host": "localhost:8080",
    "connection": "Keep-Alive",
    "user-agent": "Apache-HttpClient/4.5.13 (Java/11.0.14.1)",
    "cookie": "key1=value1; key2=value2",
    "accept-encoding": "gzip,deflate"
  },
  "params": {
    "key1": "Hello",
    "key2": "World"
  }
}
Response file saved.
> 2022-08-27T114059.200.json

Response code: 200; Time: 10ms; Content length: 248 bytes

POST 요청

./http/test.http

### POST 요청
POST http://localhost:8080/api/demo?key1=Hello&key2=World
Content-Type: application/json
TX-ID: TX-0001
Cookie: key1=value1; key2=value2

{
  "message": "Hello World"
}

response

http://localhost:8080/api/demo?key1=Hello&key2=World

HTTP/1.1 200 
Content-Type: application/json
Transfer-Encoding: chunked
Date: Sat, 27 Aug 2022 02:43:12 GMT
Keep-Alive: timeout=60
Connection: keep-alive

{
  "headers": {
    "content-type": "application/json",
    "tx-id": "TX-0001",
    "content-length": "30",
    "host": "localhost:8080",
    "connection": "Keep-Alive",
    "user-agent": "Apache-HttpClient/4.5.13 (Java/11.0.14.1)",
    "cookie": "key1=value1; key2=value2",
    "accept-encoding": "gzip,deflate"
  },
  "params": {
    "key1": "Hello",
    "key2": "World"
  },
  "body": "{\n  \"message\": \"Hello World\"\n}"
}
Response file saved.
> 2022-08-27T114312.200.json

Response code: 200; Time: 32ms; Content length: 350 bytes

POST 요청 - json 파일 활용

./http/post.json

{
  "message": "Hello World"
}

./http/test.http

### 파일 내용으로 POST 요청
POST http://localhost:8080/api/demo?key1=Hello&key2=World
Content-Type: application/json
TX-ID: TX-0001
Cookie: key1=value1; key2=value2

< ./post.json

response

http://localhost:8080/api/demo?key1=Hello&key2=World

HTTP/1.1 200 
Content-Type: application/json
Transfer-Encoding: chunked
Date: Sat, 27 Aug 2022 02:46:49 GMT
Keep-Alive: timeout=60
Connection: keep-alive

{
  "headers": {
    "content-type": "application/json",
    "tx-id": "TX-0001",
    "content-length": "32",
    "host": "localhost:8080",
    "connection": "Keep-Alive",
    "user-agent": "Apache-HttpClient/4.5.13 (Java/11.0.14.1)",
    "cookie": "key1=value1; key2=value2",
    "accept-encoding": "gzip,deflate"
  },
  "params": {
    "key1": "Hello",
    "key2": "World"
  },
  "body": "{\r\n  \"message\": \"Hello World\"\r\n}"
}
Response file saved.
> 2022-08-27T114650.200.json

Response code: 200; Time: 18ms; Content length: 354 bytes

POST 요청 - multipart

### DEMO
POST http://localhost:8080/api/v1/file/upload
Authorization: Basic dGVzdDp0ZXN0
Content-Type: multipart/form-data; boundary=boundary

--boundary
Content-Disposition: form-data; name="files"; filename="HELP.md"

< ./HELP.md
--boundary
Content-Disposition: form-data; name="files"; filename="README.md"

< ./README.md
--boundary
Content-Disposition: form-data; name="message"

Hello World
--boundary

환경변수 사용하여 요청

./http/http-client.env.json

  • 프로젝트 내에 http-client.env.json or rest-client.env.json 파일에 아래 내용 추가
{
  "local": {
    "host": "http://localhost",
    "port": "8080"
  },
  "dev": {
    "host": "https://dev.example.com",
    "port": "9090"
  }
}

./http/test.http

  • 실행시 환경(local or dev)을 선택 후 요청
### 환경변수 사용하여 요청
GET {{host}}:{{port}}/api/demo?key1=Hello&key2=World
TX-ID: TX-0001
Cookie: key1=value1; key2=value2

response

http://localhost:8080/api/demo?key1=Hello&key2=World

HTTP/1.1 200 
Content-Type: application/json
Transfer-Encoding: chunked
Date: Sat, 27 Aug 2022 03:18:10 GMT
Keep-Alive: timeout=60
Connection: keep-alive

{
  "headers": {
    "tx-id": "TX-0001",
    "host": "localhost:8080",
    "connection": "Keep-Alive",
    "user-agent": "Apache-HttpClient/4.5.13 (Java/11.0.14.1)",
    "cookie": "key1=value1; key2=value2",
    "accept-encoding": "gzip,deflate"
  },
  "params": {
    "key1": "Hello",
    "key2": "World"
  }
}
Response file saved.
> 2022-08-27T121810.200.json

Response code: 200; Time: 21ms; Content length: 248 bytes

Dynamic Variable 사용하여 요청

./http/test.http

  • (1) 요청 후 Response Handler 탭에 찍히는 로그를 확인해서 Dynamic Variable이 잘 세팅되었는지 확인
  • (2) 요청 후 위에서 세팅된 Dynamic Variable 값을 파라미터로 잘 전달하는지 확인
### (1) Dynamic Variable 사용하여 요청
POST http://localhost:8080/api/demo?key1=Hello&key2=World
Content-Type: application/json

{
  "message": "Hello World"
}

> {%
var responseBody = JSON.parse(response.body.body);
client.global.set("message", responseBody.message);
client.log(client.global.get("message")); // 하단 Services > Response Handler 탭에 찍히는 로그
%}

### (2) 위에서 세팅한 값 활용하기
GET http://localhost:8080/api/demo?message={{message}}

response

http://localhost:8080/api/demo?message=Hello World

HTTP/1.1 200 
Content-Type: application/json
Transfer-Encoding: chunked
Date: Sat, 27 Aug 2022 03:33:41 GMT
Keep-Alive: timeout=60
Connection: keep-alive

{
  "headers": {
    "host": "localhost:8080",
    "connection": "Keep-Alive",
    "user-agent": "Apache-HttpClient/4.5.13 (Java/11.0.14.1)",
    "accept-encoding": "gzip,deflate"
  },
  "params": {
    "message": "Hello World"
  }
}
Response file saved.
> 2022-08-27T123341.200.json

Response code: 200; Time: 20ms; Content length: 188 bytes

Dynamic Variable 사용하기 - js 스크립트 활용

./http/dynamic_variable.js

var responseBody = JSON.parse(response.body.body);
client.global.set("message", responseBody.message);
client.log(client.global.get("message")); // 하단 Services > Response Handler 탭에 찍히는 로그

./http/test.http

### Dynamic Variable 사용하여 요청
POST http://localhost:8080/api/demo?key1=Hello&key2=World
Content-Type: application/json

{
  "message": "Hello World"
}

> ./dynamic_variable.js

### 위에서 세팅한 값 활용하기
GET http://localhost:8080/api/demo?message={{message}}

response

http://localhost:8080/api/demo?message=Hello World

HTTP/1.1 200 
Content-Type: application/json
Transfer-Encoding: chunked
Date: Sat, 27 Aug 2022 03:45:47 GMT
Keep-Alive: timeout=60
Connection: keep-alive

{
  "headers": {
    "host": "localhost:8080",
    "connection": "Keep-Alive",
    "user-agent": "Apache-HttpClient/4.5.13 (Java/11.0.14.1)",
    "accept-encoding": "gzip,deflate"
  },
  "params": {
    "message": "Hello World"
  }
}
Response file saved.
> 2022-08-27T124548.200.json

Response code: 200; Time: 13ms; Content length: 188 bytes

요청 결과를 테스트

./http/test.http

### 요청 결과를 테스트
POST http://localhost:8080/api/demo?key1=Hello&key2=World
Content-Type: application/json

{
  "message": "Hello World"
}

> {%
    client.test("Request executed successfully", function() { // 실패시 하단의 Services > Tests 탭에 실패 항목 출력
        client.assert(response.status === 200, "Response status is not 200");
        client.assert(JSON.parse(response.body.body).message === "Hello World", "응답 메시지가 'Hello World'가 아니다")
    });
%}

참고

  • https://jojoldu.tistory.com/266
  • https://blog2.deliwind.com/20200405/IntelliJ%EC%97%90%EC%84%9C-http%EB%A1%9C-%ED%85%8C%EC%8A%A4%ED%8A%B8%ED%95%98%EA%B8%B0/
반응형

'Development > IntelliJ' 카테고리의 다른 글

[IntelliJ] 플러그인 만들기  (0) 2023.07.30
[IntelliJ] 정규식으로 문자열 치환  (0) 2019.03.20

+ Recent posts