웹 API 작성하기 -1

CCY·2020년 8월 19일
0

BackEnd (Node,Socket)

목록 보기
3/8

API란?

웹 API ( Application Programming Interface)는 여러 다른 애플리캐이션들이 연결되어 동일한 데이터를 주고 받을 수 있는 인터페이스 이다.

기본적으로 API는 요청을 받고 , 원하는 것을 응답해주는 역할을 수행한다. API는 요청과 응답해주는 서비스를 위해 제공되는 창구, 즉 인터페이스라고 이해하면 된다.

API를 통해 요청/응답을 주고 받을 수 있다.

쇼핑싸이트를 브라우저에서 주문서를 작성해서 주문 완료 버튼을 누르면, 주문서에 작성된 정보를 갖고 웹 API 로 요청을 한다. 그리고 이 웹 API를 통해 서버로 주문서 정보들이 전될어 주문과 관련된 비즈니스 로직이 수행된다.

두개의 URL를 GET 메소드로 요청/응답 하는 API 만들어보기

"use strict"

const http = require("http")
const url = require("url")

const hostname = "127.0.0.1"
const port = 3000

const server = http.createServer((req, res) => {
  switch (req.method) {
    case "GET":
      if (req.url === "/") {
        res.setHeader("Content-Type", "text/plain")
        res.writeHead(200)
        res.end("Hello Node.js HTTP SERVER")
      } else if (req.url.substring(0, 5) === "/data") {
        const queryParams = url.parse(req.url, true).query
        res.setHeader("Content-Type", "text/html")
        res.writeHead(200)
        res.write("<html><head><title>Javascript 200 </title></head>")
        for (let key in queryParams) {
          res.write(`<h1>${key}</h1>`)
          res.write(`<h2>${queryParams[key]}</h2>`)
        }
        res.end("</body></html>")
      }
      break
    default:
      res.end()
  }
})

server.listen(port, hostname, () => {
  console.log(`server is running at http://${hostname}:${port}/`)
})
  1. URL 모듈은 URL 문자열 또는 객체형 값을 유용하게 다룰수 있도록 도와주는 유틸리티이다. URL 모듈을 활용하면 문자열 url 도 파싱하여 원하는 구조 형태나 부분을 쉽게 가져올 수 있다.
  2. 생성할 서버 와 호스트를 변수로 정의한다.
  3. http.createServer로 서버를 생성하고, 서버를 생성하면 net.server 클래스의 인스턴스를 반환하는데 , 이 클래스 인스턴스는 TCP 혹은 IPC 서버 생성에 사용되며 추가적인 요청 이벤트에 응답한다. 여기서 TCP 서버를 생성하고 요청 이벤트에 응답하여 response, request를 콜백함수로 전달한다.
  4. Switch 조건문을 수행하여 request 의 method 속성값이 GET 인지 확인한다.
    이속성은 HTTP 메소드에 GET,POST,PUT,DELETE와 같은 API 에 대한 동작을 설명한다.
  5. request의 url은 api로 요청된 url의 path 정보이다. http의 url 구조는 다음과 같이 구성되있다.

    http://host[:port][/][path][?query]

여기서 '/'를 포함한 path 부분이 반환된다. 따라서 url의 path 가 / 인경우 respones 객체를 활용하여 웹API 의 응답 정보를 정의한다.

setHeader,writeHead,end 함수에 정의된 응답 정보는 "Hello Node.js HTTP SERVER" 이다.

url의 path가 /data를 포함하는 경우 페이지 제목이 Javascript으로 변하게 하였다.

Content-Type 와 HTTP 상태 코드를 설정합니다. Content-type 으로 정의한 'text/html' 은 MIME 컨텐츠 형식 또는 인터넷 미디어(html) 형식의 텍스트를 의미한다.
res.write는 응답 메세지 html 코드를 응답 본문으로 보낸다. 이 메소드는 여러번 호출하여 본문을 연속으로 이어서 제공할 수 있다.

처음 res.write() 가 호출되면 버퍼링 된 헤더 정보와 본문의 첫 번째 CHUNK(덩어리)가 클라이언트로 전송되고, 두번째 res.write()가 호출되면 Node.js 는 데이터가 스트리밍되는 것으로 가정하고 새 데이터를 추가로 보낸다. 따라서 예제 처럼 head 태그 문자열을 넣은 이후에 , body 태그 정보를 추가로 연달아 같이 전송하는 것이 마지막으로 res.end 함수에 데이터를 넣어 응답 전송을 완료한다.

조건문에 모두 해당되지 않은 경우, 응답 전송을 바로 완료처리한다.

for (let key in queryParams) {
          res.write(`<h1>${key}</h1>`)
          res.write(`<h2>${queryParams[key]}</h2>`)

우리의 코드에 /data 일때 쿼리를 지정한것이 확인된다 그래서 쿼리 조건에 맞으면 해당 데이터도 출력이 되는것을 확인 할 수 있다.

profile
✍️ 기록을 습관화 하자 ✍️ 나는 할 수 있다, 나는 개발자가 될거다 💪🙌😎

0개의 댓글