okanvikişisel web güncesi

Typescript ve Express ile API Geliştirme: Kolay ve Verimli Yol

27 Temmuz 2023 tarihinde yayınlandı~3 dakika okuma süresi

Eğer Express ve Typescript kullanarak hızlıca bir API uygulaması ayağa kaldırmak istiyorsanız, bu yazı size basit ve temel bir rehber olmayı amaçlıyor.

Internet üzerinde bu konuyu ele alan pek çok blog yazısı mevcut, fakat hem güncel hem de karmaşık olmayan bir kaynak bulmak bazen zorlayıcı olabiliyor. Dolayısıyla belirli aralıklarla güncellemeyi planladığım bu kaynağı takip etmek işinizi kolaylaştırabilir. Yine de bu yazının bir "best practise" olmadığını, ihtiyaç halinde kullanılabilecek bir referans olmayı hedeflediğini unutmayın. Ayrıca bu yazı ile birlikte oluşturacağımız uygulamanın herhangi bir veritabanına bağlantı yapmayacağını da en başından belirtmiş olalım. Siz ihtiyacınıza göre bir veritabanı teknolojisini bu uygulamaya kolayca entegre edebilirsiniz.

Hazırsanız başlayalım:

  • İlk olarak yeni bir uygulama klasörü oluşturun ve içine girin:
mkdir express-ts-api
cd express-ts-api
  • Aşağıdaki komutu çalıştırarak yeni bir npm projesi başlatın:
npm init -y

Burada -y parametresi hızlı bir biçimde projenizi oluşturmanızı sağlar. Bu parametreyi geçmediğiniz takdirde npm sizden projenizle ilgili bazı detayları girmenizi isteyecektir.

  • TypeScript ve gerekli type tanımlamaları ile birlikte nodemon paketini yükleyin:
npm install -D typescript @types/node @types/express ts-node nodemon

Buradaki nodemon paketi, siz geliştirme yaparken değişiklikleri takip ederek uygulamanın otomatik olarak yeniden başlatılmasını sağlar. Dolayısıyla yapacağınız her değişiklik sonrasın uygulamanızı yeniden başlatmaya gerek kalmaz.

  • Typescript konfigürasyonunu oluşturmak için aşağıdaki komutu çalıştırın:
npx tsc --init
  • Temel ihtiyacımız olan Express'i projeye dahil edin:
npm install express
  • Şimdi bütün işlevlerimizi derli toplu bir arada tutacağımız dizin yapısını hazırlama zamanı. Öncelikle uygulama ana dizininde src klasörünü oluşturup ve içerisine app.ts dosyasını ekleyin:
mkdir src
cd src
touch app.ts

Sonra uygulamadaki farklı kaynak tiplerine (users, products vb.) erişimi yönetecek route yapısını tutmak için routes klasörünü oluşturup içerisine ihtiyacınıza göre [route-type].ts ve index.ts dosyalarını ekleyin:

(Biz burada örnek olması açısından /api şeklindeki endpoint için api.ts dosyasını eklemiş olacağız.)

mkdir routes
cd routes
touch index.ts
touch api.ts
  • /api ile ilgili route tanımlamalarını yapmak için api.ts dosyasını aşağıdaki gibi güncelleyin:
// src/routes/api.ts
import { Router } from 'express';
const router = Router();
 
router.get('/', (req, res) => {
  res.send('It is up and running!');
});
 
// Diğer api routeları buraya gelebilir.
 
export default router;

Sonrasında routes altındaki index.ts dosyasını aşağıdaki gibi güncelleyin:

// src/routes/index.ts
import { Router } from 'express';
import apiRouter from './api';
 
const router = Router();
 
router.use('/api', apiRouter);
 
export default router;

Bu işlemi tüm routeların tek bir dosya altında toplanıp kolayca yönetilebilmesini sağlamak için yaptık. Eğer bunun dışında bir endpoint eklemeniz gerekirse, artık tek yapmanız gereken ilgili dosyayı ekledikten sonra index.ts içerisinde import edip yukarıdaki gibi tanımlama yapmak.

  • app.ts'i bu routeları kullanabileceğimiz şekilde güncelleyin:
// src/app.ts
import express from 'express';
import routes from './routes';
 
const app = express();
const port = 3000;
 
app.use('/', routes);
 
app.listen(port, () => {
  console.log(`app is running on ${port} port`);
});
  • Son olarak nodemon'un uygun biçimde çalışmasını sağlamak için package.json'daki scripts kısmına aşağıdaki eklemeyi yapın:
// package.json
"scripts": {
  "dev": "nodemon --watch 'src/**/*.ts' --exec ts-node src/app.ts"
}
 

Mevcut haliyle bu uygulama sadece local development amaçlı kullanılabilir. Şimdi kodumuzu build edecek ve bağımsız olarak çalıştırabilecek scriptleri aşağıdaki gibi package.json dosyasına ekleyin:

// package.json
"scripts": {
    "start": "node dist/app.js",
    "build": "tsc -p .",
    "dev": "nodemon --watch 'src/**/*.ts' --exec ts-node src/app.ts"
}

Bu noktada; build sonrası ortaya çıkan assetlerin dist/ dizini altında tutulması için, uygulamanızın ana dizinindeki tsconfig.json'daki outDir değerini "./dist" olarak değiştirmeniz gerektiğini unutmayın.

  • Şimdi npm run dev komutu ile uygulamanızı ayağa kaldırıp test edebilirsiniz.

Tüm bu adımları tamamladıysanız, üzerinde kolayca geliştirme yapıp bir sunucuda (gerekli konfigürasyonları tamamladıktan sonra) yayına alabileceğiniz API uygulamanız artık hazır.