본문 바로가기
[IT] Node.JS

[Node.js] API 전송 (request) 및 결과 Text 비교 (git-diff)

by 오리엔탈킴 2022. 12. 23.

 

Node.js의 Request 모듈을 이용하여 서로 다른 2개의 API를 날려보고, 응답받은 결과를 git-diff라는 모듈을 활용하여 비교하고 차이점을 가시화해서 보여주는 간단한 코드를 작성해보도록 하겠습니다.

사전준비

먼저 테스트를 위해 로컬에 아래와 같이 서로 다른 URL로 요청하면 서로 다른 결과를 리턴하는 2개의 Get 메서드의 API를 리턴하는 서버를 간단하게 작성해서 띄웠습니다.

http://127.0.0.1:8080/get/member
 {
     "address": "Seoul",
     "nationality": "Korea",
     "name": "Ori Kim"
 }

 

http://127.0.0.1:8080/get/member2
 {
     "address": "Seoul",
     "nationality": "Korea",
     "name": "Ori Lee"
 }

 

request-promise-native모듈 사용해서 API 전송하기

API를 전송을 하기 위해 가장 간단하게 사용이 가능한 request 모듈을 이용해서 전송을 하겠습니다. 2개의 API를 전송한 다음 응답을 받아 비교를 하는 식으로 순차적으로 처리를 하며 구현이 될 예정이라 비동기식으로 구현을 할 예정입니다. 이를 위해 request 모듈을 기반으로 작성된 request-promise-native라는 모듈을 이용해서 구현을 하도록 하겠습니다. 이를 위해 먼저, 아래와 같이 request-promise-native을 npm을 이용하여 설치합니다.

npm install request
npm install request-promise-native

 

그 이후에 js 자바스크립트 파일을 생성 후, require는 "request-promise-native"만 선언해서 가져와서 사용하면 됩니다. js 파일을 실행하면 함수가 실행되며 작성한 코드가 바로 실행될 수 있도록 아래 함수안에 코드를 작성하고, 비동기식으로 실행이 되도록 async 키워드를 붙입니다.

 

 

아래와 같이 request.get() 메서드안에 url과 method를 설정하는 옵션을 작성하고, API를 전송하고 응답을 받아 간단하게 응답을 로그로 찍어 정상적으로 API 전송이 되었는지 확인합니다.

const request = require("request-promise-native");

(async () => {

    await request.get({
        url: 'http://127.0.0.1:8080/get/member',
        method: 'GET'
    },
         (err, res, body) => {
            console.log(body);
        });

})();
{"address":"Seoul","nationality":"Korea","name":"Ori Kim"}

 

git-diff 모듈 이용해서 두 API 응답 결과 비교 (Text 비교)

git-diff 모듈은 서로 다른 2개의 텍스트를 비교하여 차이점을 Git의 코드 변경사항을 보여주는 것과 유사하게 비교 결과를 가시화해주는 모듈입니다. (https://www.npmjs.com/package/git-diff)

응답받은 Json 포맷화

줄바꿈(\n)을 기준으로 두 텍스트 중 다른 라인을 보여주는 모듈이라서, 위의 Json 응답이 한 줄로 전송을 받기 때문에 JSON을 줄 바꿈을 하여 가시화해서 처리할 수 있도록 아래와 같이 JSON 모듈을 사용합니다.

JSON.stringify(JSON.parse(body),null,4)

 

그러면 아래와 같이 JSON 엘리먼트마다 줄 바꿈을 하고 각 계층마다 4칸씩 들여 쓰기를 하며 데이터가 저장됩니다.

 {
     "address": "Seoul",
     "nationality": "Korea",
     "name": "Ori Kim"
 }

 

두 응답 JSON 비교

git-diff의 사용법은 간단한데, 2개의 텍스트를 아래와 같이 매개변수로 해서 메서드를 호출하면 Git의 변경사항이 -와 + 기호를 통해 표현이 되는 것과 동일하게 두 텍스트의 추가되거나 삭제된 부분 앞에 +,- 기호가 붙은 결과 텍스트로 리턴을 해줍니다.

const gitDiff = require("git-diff");

let diffText = gitDiff(result1, result2);

 

전체 코드

const request = require("request-promise-native");
const gitDiff = require("git-diff");

(async () => {

    let result1, result2;

    await request.get({
        url: 'http://127.0.0.1:8080/get/member',
        method: 'GET'
    },
         (err, res, body) => {
            console.log(body);
            result1 = JSON.stringify(JSON.parse(body),null,4);
        });

    await request.get({
        url: 'http://127.0.0.1:8080/get/member2',
        method: 'GET'
    },
         (err, res, body) => {
            console.log(body);
            result2 = JSON.stringify(JSON.parse(body),null,4);
        });

    let diffText = gitDiff(result1, result2);

    console.log(diffText);

})();

 

전체 코드는 위와 같은데, 서로 다른 2개의 API를 날리고 결과 JSON을 포맷화한 후, git-diff를 이용해 두 결과를 비교해서 로그를 찍는 코드입니다. 로그의 결과는 아래와 같습니다.

 {
     "address": "Seoul",
     "nationality": "Korea",
-    "name": "Ori Kim"
+    "name": "Ori Lee"
 }

 

 

반응형

댓글