๐ŸŽฏ ์ฑ„๋„ API๋ฅผ ์„ค๊ณ„ํ•˜๊ณ , app.route()๋ฅผ ์‚ฌ์šฉํ•ด ์ฝ”๋“œ ๊ตฌ์กฐ๋ฅผ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“™ Today I Learned

์ฑ„๋„ API ์„ค๊ณ„

  • ์ฑ„๋„ ์ƒ์„ฑ : POST /channels

    • request : body (channelTitle)

    • response : 201 Created ${channelTitle}๋‹˜ ์ฑ„๋„์„ ์‘์›ํ•ฉ๋‹ˆ๋‹ค. -> ์ฑ„๋„ ๊ด€๋ฆฌ ํŽ˜์ด์ง€


  • ์ฑ„๋„ ์ˆ˜์ • : PUT /channels/:id

    • request: URL (id), body(channelTitle)

    • response : 200 Ok ์ฑ„๋„๋ช…์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด${} => ์ˆ˜์ • ${}


  • ์ฑ„๋„ ๊ฐœ๋ณ„ ์‚ญ์ œ : DELETE /channels/:id

    • request: URL(id)

    • response : 200 Ok ์‚ญ์ œ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. => ๋ฉ”์ธ ํŽ˜์ด์ง€


  • ์ฑ„๋„ ์ „์ฒด ์กฐํšŒ : GET /channels

    • request: x

    • response : 200 Ok ์ฑ„๋„ ์ „์ฒด ๋ฐ์ดํ„ฐ list, json array


  • ์ฑ„๋„ ๊ฐœ๋ณ„ ์กฐํšŒ : GET /channels/:id

    • request: URL(id)

    • response : ์ฑ„๋„ ๊ฐœ๋ณ„ ๋ฐ์ดํ„ฐ




์ฑ„๋„ API ์‹ค์Šต

Express & Map ๊ฐ์ฒด ์„ค์ •

const express = require('express');
const app = express();
app.listen(7777);
app.use(express.json());

let db = new Map();
let id = 1;

Express๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„๋ฅผ ์ƒ์„ฑํ•˜๊ณ , Map ๊ฐ์ฒด๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.


์ฑ„๋„ ์ƒ์„ฑ, ์ „์ฒด ์กฐํšŒ (/channels)

app
  .route('/channels')
  .post((req, res) => {
    if (req.body.author) {
      db.set(id++, req.body);

      res.status(201).json({
        message: `${db.get(id - 1).author}๋‹˜์˜ ๊ธ€์“ฐ๊ธฐ ์ƒํ™œ์„ ์‘์›ํ•ฉ๋‹ˆ๋‹ค.`,
      });
    } else {
      res.status(400).json({
        message: '์š”์ฒญ ๊ฐ’์„ ์ œ๋Œ€๋กœ ๋ณด๋‚ด์ฃผ์„ธ์š”',
      });
    }
  }) // ์ž‘๊ฐ€ ์ฑ„๋„ ๊ฐœ๋ณ„ ์ƒ์„ฑ
  .get((req, res) => {
    if (db.size) {
      let channels = [];
      db.forEach((value) => {
        channels.push(value);
      });

      res.status(200).json(channels);
    } else {
      res.status(404).json({
        message: '์ž‘๊ฐ€๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.',
      });
    }
  }); // ์ž‘๊ฐ€ ์ฑ„๋„ ์ „์ฒด ์กฐํšŒ

  • POST /channels : req.body.author๊ฐ€ ์กด์žฌํ•˜๋ฉด ์ƒˆ๋กœ์šด ์ฑ„๋„์„ Map์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

  • GET /channels : ์ €์žฅ๋œ ๋ชจ๋“  ์ฑ„๋„์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฉด 404 ์‘๋‹ต์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.


๐Ÿš€ ์ฑ„๋„ ์ƒ์„ฑ ํฌ์ŠคํŠธ๋งจ ๊ฒฐ๊ณผ

โœ… 201 Created

โŒ 400 Bad Request


๐Ÿš€ ์ „์ฒด ์กฐํšŒ ํฌ์ŠคํŠธ๋งจ ๊ฒฐ๊ณผ

โœ… 200 OK

โŒ 404 Not Found




์ฑ„๋„ ๊ฐœ๋ณ„ ์กฐํšŒ, ์ˆ˜์ •, ์‚ญ์ œ

app
  .route('/channels/:id')
  .get((req, res) => {
    const id = parseInt(req.params.id);

    let channel = db.get(id);
    if (channel) {
      res.status(200).json(channel);
    } else {
      res.status(404).json({
        message: '์ž‘๊ฐ€ ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.',
      });
    }
  }) // ์ž‘๊ฐ€ ์ฑ„๋„ ๊ฐœ๋ณ„ ์กฐํšŒ
  .put((req, res) => {
    const id = parseInt(req.params.id);
    let channel = db.get(id);

    if (!channel) {
      res.status(404).json({
        message: '์ž‘๊ฐ€ ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.',
      });
    }

    let existingAuthor = channel.author;
    let newAuthor = req.body.author;
    channel.author = newAuthor;

    res.status(200).json({
      message: `์ž‘๊ฐ€ ์ด๋ฆ„์ด ์ •์ƒ์ ์œผ๋กœ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค ๊ธฐ์กด ${existingAuthor}์—์„œ ${newAuthor}๋กœ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.`,
    });
  }) // ์ž‘๊ฐ€ ์ฑ„๋„ ๊ฐœ๋ณ„ ์ˆ˜์ •
  .delete((req, res) => {
    const id = parseInt(req.params.id);

    let channel = db.get(id);
    if (channel) {
      db.delete(id);

      res.status(200).json({
        message: `${channel.author}(์ด)๊ฐ€ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.`,
      });
    } else {
      res.status(404).json({
        message: '์ž‘๊ฐ€ ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.',
      });
    }
  }); // ์ž‘๊ฐ€ ์ฑ„๋„ ๊ฐœ๋ณ„ ์‚ญ์ œ

  • GET /channels/:id : ํŠน์ • id์˜ ์ฑ„๋„์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

  • PUT /channels/:id : ํŠน์ • id์˜ ์ฑ„๋„์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด author๊ณผ ์ƒˆ๋กœ์šด author๋ฅผ ์ถœ๋ ฅํ•ด ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์„ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

  • DELETE /channels/:id: ํŠน์ • id์˜ ์ฑ„๋„์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.


๐Ÿš€ ๊ฐœ๋ณ„ ์กฐํšŒ ํฌ์ŠคํŠธ๋งจ ๊ฒฐ๊ณผ

โœ… 200 OK

โŒ 404 Not Found


๐Ÿš€ ๊ฐœ๋ณ„ ์ˆ˜์ • ํฌ์ŠคํŠธ๋งจ ๊ฒฐ๊ณผ

โœ… 200 OK

โŒ 404 Not Found


๐Ÿš€ ๊ฐœ๋ณ„ ์‚ญ์ œ ํฌ์ŠคํŠธ๋งจ ๊ฒฐ๊ณผ

โœ… 200 OK

โŒ 404 Not Found




๋นˆ ๊ฐ์ฒด ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ• 3๊ฐ€์ง€

1๏ธโƒฃ. Object.keys() (โœ… ์ถ”์ฒœ)

2๏ธโƒฃ. for ...in

3๏ธโƒฃ. lodash ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ : _.isEmpty

๋นˆ ๊ฐ์ฒด ํ™•์ธ ์ฝ”๋“œ ์˜ˆ์ œ

const obj1 = {}
const obj2 = { message: 'hello' };

const str1 = 'one';
const str2 = '';

function isEmpty(obj) {
 return Object.keys(obj).length === 0; 
}

console.log(isEmpty(obj1)); // true
console.log(isEmpty(obj2)); // false

console.log(isEmpty(str1)); // false
console.log(isEmpty(str2)); // true



โœ๏ธ ํ•œ ์ค„ ํšŒ๊ณ 

๋™์ผํ•œ URL์„ ๊ธฐ์ค€์œผ๋กœ app.route()๋ฅผ ์‚ฌ์šฉํ•ด API ์—”๋“œํฌ์ธํŠธ๋ฅผ ๋ฌถ์œผ๋‹ˆ, ์ฝ”๋“œ๊ฐ€ ๋” ๊น”๋”ํ•˜๊ณ  ๊ตฌ์กฐ์ ์œผ๋กœ ์ •๋ฆฌ๋˜์–ด ์œ ์ง€๋ณด์ˆ˜๋„ ๋” ์‰ฌ์šธ ๊ฒƒ ๊ฐ™๋‹ค.

profile
๐ŸŒฑ๊ฐœ๋ฐœ ๊ธฐ๋ก์žฅ

0๊ฐœ์˜ ๋Œ“๊ธ€