CodeBlanks Logo Icon CodeBlanks

Özet - Routing

param, query ve Router'ı birleştirerek bir kullanıcı API'si yazarsın.

Özet: Kullanıcı API'si

Bu derste öğrendiklerimizi birleştirerek bir kullanıcı API'si yazacağız: rota parametreleri, query parametreleri ve express.Router birlikte.

API şöyle çalışır: GET /users tüm kullanıcıları listeler, GET /users/:id tek bir kullanıcıyı döndürür, GET /search?q=... isme göre arama yapar. Router, kullanıcı rotalarını /users altında gruplar; arama rotası ise uygulama kökünde kalır. Bu, gerçek bir REST API'nin iskeletidir: kaynak rotaları router ile gruplanır, arama isteğe bağlı parametrelerle query olarak yapılır. res.json ile JSON yanıtı göndeririz.

Parçaları birleştirme

API üç parçadan oluşur. Birincisi router: userRouter.get("/", ...) ve userRouter.get("/:id", ...), app.use("/users", userRouter) ile bağlanır. İkincisi arama: app.get("/search", (req, res) => { ... req.query.q ... }).

:id rotasında users.find ile kimliği eşleşen kullanıcıyı buluruz. Number(req.params.id) ile dize parametreyi sayıya çeviririz, çünkü users dizisinde id sayıdır. /search rotasında req.query.q ile arama dizesini alır ve users.filter ile ismi içeren kullanıcıları buluruz. Her rota res.json ile JSON döndürür. Bu, REST API'lerin standart yapısıdır.

Uygulama Kullanıcı API'sini yaz

const userRouter = express.Router() tanımla. let users = [{ id: 1, name: "Ayşe" }, { id: 2, name: "Mehmet" }] tanımla. userRouter.get("/", (req, res) => res.json(users)) ekle. userRouter.get("/:id", (req, res) => { const user = users.find(function(u) { return u.id === Number(req.params.id); }); res.json(user); }) ekle. app.use("/users", userRouter) ile bağla. app.get("/search", (req, res) => { const found = users.filter(function(u) { return u.name.includes(req.query.q); }); res.json(found); }) ekle. Sunucu /users/1'e istek yapar.

Başlangıç kodu

index.js
const express = require("express");
const app = express();

// bir kullanıcı router'ı oluştur, iki kullanıcılı bir dizi tanımla
// router kök rotada tüm kullanıcıları JSON olarak gönder
// router :id rotasında tek kullanıcıyı JSON olarak gönder
// router'ı /users altında bağla
// /search rotasında query ile arama yap
// buraya yaz

const server = app.listen(3000, () => {
  const http = require("http");
  http.get("http://localhost:3000/users/1", (res) => {
    let body = "";
    res.on("data", (c) => body += c);
    res.on("end", () => { console.log("Yanıt: " + body); server.close(); });
  });
});

Örnek çözüm

index.js
const express = require("express");
const app = express();

const userRouter = express.Router();
let users = [{ id: 1, name: "Ayşe" }, { id: 2, name: "Mehmet" }];
userRouter.get("/", (req, res) => res.json(users));
userRouter.get("/:id", (req, res) => {
  const user = users.find(function(u) { return u.id === Number(req.params.id); });
  res.json(user);
});
app.use("/users", userRouter);
app.get("/search", (req, res) => {
  const found = users.filter(function(u) { return u.name.includes(req.query.q); });
  res.json(found);
});

const server = app.listen(3000, () => {
  const http = require("http");
  http.get("http://localhost:3000/users/1", (res) => {
    let body = "";
    res.on("data", (c) => body += c);
    res.on("end", () => { console.log("Yanıt: " + body); server.close(); });
  });
});

Beklenen çıktı

Yanıt: {"id":1,"name":"Ayşe"}

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Tek bir kullanıcıyı hangi rota döndürür?

index.js
GET /users/5
  • GET /users/:id Doğru cevap
  • GET /users
  • GET /search?q=5
  • POST /users

Açıklama: /users/:id rota parametresi ile tek kullanıcı döner.

2 Parçayı rolüne eşle

Kavram Anlamı
userRouter.get('/:id') Tek kullanıcı
req.params.id Rota kimliği
req.query.q Arama dizesi
app.use('/users', ...) Router'ı bağlar

Orta seviye bölümündeki tüm dersler