Oracle veritabanını RESTful API, JSON desteği ve modern sunucu tarafı JavaScript ile entegre ederek web uygulamalarını nasıl hızla modernize edebileceğinizi anlatan, uygulamalı ve pratik bir rehber.
Oracle Veritabanını Modern Web Uygulamalarına REST ve JSON ile Bağlamak
Bu makalede Oracle veritabanını modern web uygulamalarına entegre etmenin pratik yollarını, REST API, JSON desteği ve Node.js gibi sunucu tarafı teknolojilerle uyumlu hale getirmenin örneklerini göreceksiniz. Hedef kitle çalışan yazılımcılar; veritabanı ile arayüz arasındaki iletişimi güncellemek isteyenler için dayanaklı bir rehber hazırlanmıştır.
Neden Oracle ile modern web ?
Oracle veritabanları kurumsal sistemlerde güvenilirlik, ölçeklenebilirlik ve gelişmiş sorgu yetenekleri sunar. Ancak klasik arayüz yaklaşımları —örneğin doğrudan PL/SQL çağrılarıyla sunucu tarafı render— modern tek sayfa uygulamaları (SPA) ve mikroservis mimarilerine uygun değildir. Bu sebeple veritabanı ile web katmanı arasında hafif, standart tabanlı bir arabirim gereklidir.
RESTful API'ler ve JSON, hem tarayıcı tabanlı uygulamalar hem de mobil istemciler için lingua franca haline geldi. Oracle'ın sunduğu JSON desteği ve REST ara katmanları sayesinde veritabanını doğrudan bu ekosistemlere bağlamak mümkündür. Böylece frontend ve backend ayrışması, ölçeklenebilirlik ve test edilebilirlik artar.
Oracle'da JSON ve REST: Temel olanaklar
Oracle Database 12c ve sonrasında JSON veri türleri, JSON_SEARCH, JSON_TABLE gibi fonksiyonel destekler ve performans optimizasyonları geldi. Veri JSON formatında saklanıp sorgulanabilir; aynı zamanda ilişkisel modellerle hibrit kullanım desteklenir. Bu özellikler, NoSQL'e tam geçiş yapmadan modern uygulama gereksinimlerini karşılamaya olanak tanır.
Oracle REST Data Services (ORDS), veritabanı nesnelerini REST endpoint'lerine dönüştürmek için yaygın kullanılan bir katmandır. ORDS ile PL/SQL prosedürlerini, SQL sorgularını ve Oracle nesnelerini HTTP üzerinden çağırmak mümkündür. ORDS ayrıca araç zincirleriyle (APIs, autentikasyon, sürümleme) uyumludur.
Uygulamalı örnek: Node.js ile Oracle REST akışı
Aşağıdaki örnek, Oracle veritabanından JSON döndüren basit bir REST endpoint'inin nasıl kullanılacağını gösterir. İki yaklaşım var: (1) ORDS üzerinden doğrudan REST endpoint çağırmak; (2) Node.js uygulamasında oracledb sürücüsü ile veritabanına bağlanıp JSON formatında veri döndürmek. İlk örnek ORDS varsayımıyla REST çağrısı gösterir.
<!-- ORDS üzerinden GET çağrısı örneği -->
GET /ords/hr/employees/123
Host: api.example.com
Accept: application/json
// Yanıt (örnek)
{
"employee_id": 123,
"first_name": "Ali",
"last_name": "Yılmaz",
"department": "Yazılım"
}
Node.js tarafında doğrudan veritabanına bağlanıp JSON döndürmek isterseniz, oracledb paketi kullanılabilir. Aşağıdaki minimal örnek Express + oracledb kombinasyonunu gösterir.
const express = require('express');
const oracledb = require('oracledb');
const app = express();
oracledb.initOracleClient({ libDir: '/opt/oracle/instantclient_19_8' });
app.get('/employees/:id', async (req, res) => {
let connection;
try {
connection = await oracledb.getConnection({ user: 'HR', password: '***', connectionString: 'dbhost:1521/ORCLPDB1' });
const result = await connection.execute(
`SELECT json_object('employee_id' VALUE employee_id, 'first_name' VALUE first_name, 'last_name' VALUE last_name) AS data FROM employees WHERE employee_id = :id`,
[req.params.id],
{ outFormat: oracledb.OUT_FORMAT_OBJECT }
);
if (result.rows.length === 0) return res.status(404).json({ error: 'Not found' });
// data sütunu metin olarak gelir; JSON.parse ile nesneye çevrilebilir
res.json(JSON.parse(result.rows[0].DATA));
} catch (err) {
console.error(err);
res.status(500).json({ error: 'Internal server error' });
} finally {
if (connection) await connection.close();
}
});
app.listen(3000);
Performans ve güvenlik ipuçları
Veritabanı ile web katmanı arasında JSON kullanırken performans iyileştirmeleri önemlidir. JSON sütunları için uygun indeksleme (functional indexes) ve JSON_EXISTS/JSON_VALUE gibi fonksiyonların kullanımı sorgu performansını artırır. Oracle'da JSON verisi üzerinde indeks oluştururken genellikle B-tree yerine path-based index tercih edilir.
Güvenlikte ise en azından şu başlıklara dikkat edin: kimlik doğrulama (OAuth2 / JWT), yetkilendirme, giriş verisi sanitizasyonu ve sorgu parametre bağlama (bind variables) kullanımı. Ayrıca ORDS veya uygulama katmanında rate limiting ve monitoring uygulamak kritik öneme sahiptir.
Eski yaklaşımdan modern mimariye geçiş (örnek yol haritası)
Klasik yaklaşımlar doğrudan veritabanı prosedürlerini UI'den çağırma veya sunucu tarafında ağır state tutma eğilimindeydi. Bunları modernleştirmek için adım adım geçiş planı öneriyorum:
- Mevcut PL/SQL prosedürlerini ve sorguları envanterleyin; hangi iş mantıklarının veritabanında kalacağına karar verin.
- ORDS veya benzeri bir katmanla REST endpoint'leri oluşturun; yeni endpoint'leri küçük parçalara bölüp sürümlendirin.
- Frontend'i (React/Vue/Angular) REST/GraphQL üzerinden besleyin; sunucu tarafı render yerine API-first yaklaşımı benimseyin.
- Test ve izleme altyapısı kurun (API testleri, performans metrikleri, loglama).
Geçiş kademeli olmalı: her yeni endpoint için işlevsellik doğrulanmalı ve eski kullanımlar geride yavaşça kapatılmalıdır. Bu strateji, rollback kolaylığı ve kullanıcı deneyiminde kesinti riskini azaltır.
Sık Sorulan Sorular
Oracle'da JSON saklamanın dezavantajı var mı?
JSON kullanımı esneklik sağlar ancak aşırı derecede normalize edilmemiş veri ilişkilerinin yönetimini zorlaştırabilir. Karmaşık ilişkiler için ilişkisel modelleme daha uygundur. Ayrıca büyük JSON dokümanları bellekte ve I/O üzerinde yük yaratabilir; bu yüzden doğru indeksleme ve sorgu yapıları şarttır.
ORDS zorunlu mu yoksa doğrudan bağlantı mı daha iyi?
ORDS, standartlaştırılmış HTTP/REST katmanı sağlar ve uygulama sunucusu yükünü hafifletir. Küçük ve özel projelerde doğrudan oracledb ile bağlantı pratik olabilir; fakat üretim ölçeğinde ORDS veya API gateway kullanmak güvenlik, izleme ve sürüm yönetimi açısından genellikle daha iyidir.
Mikroservis mimarisine geçerken veritabanı nasıl tasarlanmalı?
Mikroservislerde veritabanı per servis prensibi sıkça önerilir; ama kurumsal sistemlerde tekil Oracle örneğini paylaşan bir model de yaygındır. Hassasiyet: servisler arası sınırlar, veri tutarlılığı ve transaction yönetimi. Event-driven senkronizasyon veya Change Data Capture (CDC) gibi yaklaşımlar, veriyi servisler arasında tutarlı tutmak için kullanılabilir.
İlgili Eğitim
Sonuç
Oracle veritabanını modern web uygulamalarına entegre etmek, doğru araç ve mimari tercihleriyle hem performanslı hem de sürdürülebilir çözümler sunar. JSON ve REST destekleri, ORDS ve doğrudan veritabanı sürücüleri ile birlikte kullanıldığında esnek ve ölçeklenebilir bir API katmanı oluşturmak mümkündür. Geçiş planını kademeli ve ölçümlenebilir adımlarla yürütmeniz, riskleri azaltır ve ekip üretkenliğini korur.
