웹 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}/`)
})
여기서 '/'를 포함한 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 일때 쿼리를 지정한것이 확인된다 그래서 쿼리 조건에 맞으면 해당 데이터도 출력이 되는것을 확인 할 수 있다.