Express (3) API 사용하기

2022. 9. 27. 20:57·개발/Express

이번 포스팅에서는 Express를 통해 외부 API를 호출하고, 응답을 전달 받아 표시하는 방법에 대해 알아보도록 하겠습니다. Express에서 API를 사용하는 여러 방법이 있지만 node에서 기본적으로 제공하는 https를 사용할 수 있습니다.

API 호출하기 (비트코인 가격 조회)

이번 예시에서는 바이낸스 거래소 API를 사용하여 비트코인(BTC) 가격을 가져와보도록 하겠습니다. 아래처럼 코드를 작성하고 하고 로그를 찍어보면 요청한 API에 대한 모든 응답을 확인할 수 있습니다. 

const express = require("express");
const https   = require("https");

const app = express();

app.get("/", function(req, res){
        btcPriceURL = "https://api1.binance.com/api/v3/ticker/price?symbol=BTCBUSD";
        https.get(btcPriceURL, function(btcRes){
        console.log(btcRes);
        })
})

app.listen(3000, function() {
    console.log("Server is running at 3000...")
})

우리에게 필요한 정보인 비트코인 가격 응답은 data 안에 있는데요. 로그를 찍어보면 16진수 형식의 응답이라 사람이 바로 이해할 수는 없습니다.

 

16진수 응답을 일반 텍스트 형식으로 전환하려면 JSON.parse()를 사용할 수 있습니다. 이제 응답 데이터를 JSON 형식 전환하여 웹에 전달해보겠습니다.

const express    = require("express");
const https      = require("https");

const app = express();

app.get("/", function(req, res){
        btcPriceURL = "https://api1.binance.com/api/v3/ticker/price?symbol=BTCBUSD";
                https.get(btcPriceURL, function(btcRes){
            btcRes.on("data", function(data){
                const btcPrice = JSON.parse(data) 
                res.send(btcPrice)
            })
        })
})

app.listen(3000, function() {
    console.log("Server is running at 3000...")
})

이렇게 하면 비트코인 가격이 정상적으로 표시되는 것을 확인할 수 있습니다.

API를 사용하여 동적 웹페이지 만들기 (다른 코인 페어 조회)

동일한 API 호출 구조를 사용하여 이더리움(ETHBUSD)과 같은 다른 코인 페어의 가격을 조회하는 방법은 무엇일까요?

 

이전 글 동적 웹사이트 만들기에서 살펴봤듯이 html 파일에서 form 태그를 통해 post 요청을 전송하고 이를 Express에서 처리해주면 사용자의 요청에 응답하는 동적 웹페이지를 구성할 수 있습니다.

 

먼저 index.html 파일을 아래와 같이 작성합니다.

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Coin Price Tracker</title>
</head>
<body>
    <h1>Coin Price Tracker</h1>
    <form action="/" method="post">
        <label for="coinPair">CoinPair</label>
        <input id="coinPair" type="text" name="coinPair" placeholder="BTCUSDT">
        <button type="submit">Go</button>
    </form>

</body>
</html>

app.js를 다음과 같이 수정합니다.  참고로 send()는 기본적으로 하나의 응답만을 전달할 수 있습니다. html 문서 내에 여러 결과를 기록하고 싶은 경우에는 아래와 같이 res.write()를 사용하여 HTML 문서를 작성할 수 있습니다

const express    = require("express");
const https      = require("https");
const bodyParser = require("body-parser");

const app = express();
app.use(bodyParser.urlencoded({extended: true}));

app.get("/", function(req, res){
    res.sendFile(__dirname + "/index.html")
})

app.post("/", function(req, res){
    const coinPair = req.body.coinPair;
    const url      = "https://api1.binance.com/api/v3/ticker/price?symbol=" + coinPair;

    https.get(url, function(resData){
        resData.on("data", function(data){
            const coinData = JSON.parse(data);
            const symbol   = coinData.symbol;
            const price    = coinData.price;

            res.write("<h1>"+symbol+"</h1>");
            res.write("<p>"+price+"</p>");

            res.send();
        })
    })
})

app.listen(3000, function() {
    console.log("Server is running at 3000...")
})

이제 사용자는 바이낸스 거래소에 상장된 코인 페어(BTCUSDT, ETHBUSD 등)를 입력하여 가격을 조회할 수 있습니다.

 

이상으로 Express에서 외부 API를 호출하고 응답을 전달하여 웹페이지에 표시하는 방법에 대해 알아봤습니다.

'개발 > Express' 카테고리의 다른 글

Express (2) 동적 웹사이트 만들기 (계산기 서비스)  (0) 2022.09.23
Express (1) 기초 설치와 서버 실행  (0) 2022.09.21
'개발/Express' 카테고리의 다른 글
  • Express (2) 동적 웹사이트 만들기 (계산기 서비스)
  • Express (1) 기초 설치와 서버 실행
휘Hwi
휘Hwi
여행, 사진, 개발, 책 이야기를 기록하는 여행자 휘의 블로그 𓂍
마이리얼트립 프로모션 할인 🏝️
마이리얼트립 호텔 예약 배너
※ 배너를 클릭하여 상품 구매 시, 파트너스 활동에 대한 소정의 수수료를 지급받습니다. 구매자에게 추가로 부과되는 수수료는 없습니다.
  • 휘Hwi
    휘: 끝나지 않은 이야기
    휘Hwi
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 기록
        • 일상 에세이
        • 인사이트
        • 투자와 재테크
        • 코인 이야기
        • 아카이빙
        • 집무실 레터
        • 사랑에 대하여
        • 번역 이야기(完)
        • 프리랜서 일지(完)
      • 여행 N
        • 🌎 세계 여행기 S1 (完)
        • 🌊 삼삼한 여행기 (完)
        • 🚶 온더로드
        • 🇯🇵 일본
        • 🏝️ 발리
        • 🇻🇳 베트남 N
        • 🇱🇰 스리랑카
        • 🇮🇳 인도
        • 🇹🇭 태국
        • 🇸🇬 싱가포르
        • 🇦🇺 호주
        • 🇭🇰 홍콩
        • 🇰🇷 한국
        • 🍚 여행자의 한 끼
        • ℹ️ 여행 정보
      • 사진
        • 사진가
        • 사진 이론과 생각
        • 사진 관련 정보
      • 영상
        • 파이널컷 모션 공부
        • 고프로 GoPro
        • 영상 관련 정보
      • 책
        • 책 읽고 쓰기
      • 개발
        • 티스토리
        • Internet
        • HTML
        • CSS
        • JavaScript
        • Typescript
        • React
        • Node.js
        • Express
        • NestJS
        • Python
        • Django
        • MySQL
        • MongoDB
        • AWS
        • Deployment
        • Terminal
        • Git
        • Glossaries
        • Articles
        • Projects
        • TIL;
      • 미분류
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
휘Hwi
Express (3) API 사용하기
상단으로

티스토리툴바