Etzel Art of Digital Manufacturing
Bize ulaşın
Lunex 1.6.0 kullanım kılavuzu

Siparişleri bulun ve sonucu kullanın

Hazır projeyle gerçek SELECT, boş liste ve bulunamayan siparişi deneyin.

Hazırlanan projeyi kullanarak önce bir müşterinin siparişlerini listeleyin; sonra tek bir siparişi bulun. Bu iki işin boş sonuç davranışı farklıdır.

1. Müşterinin siparişlerini listeleyin

  1. API design → searchOrders → Try it açın.
  2. Target → Running project seçin.
  3. customerId (query, required) alanına C-100 yazın.
  4. Response content type (Accept) → No preference seçip Send kullanın.

Başlangıç verisinde 200 ve iki kayıt gelir:

[
  {"order_id":"ORD-1001","customer_id":"C-100","sku":"TEA-01","quantity":2,"status":"NEW","version":0},
  {"order_id":"ORD-1003","customer_id":"C-100","sku":"TEA-01","quantity":1,"status":"NEW","version":0}
]

Müşteri koduyla gerçek veritabanından okunan siparişler

C-200 için tek elemanlı liste, C-NONE için boş liste [] bekleyin. Liste aramasında sonuç bulunmaması hata değildir. Kayıt ekleme bölümünü yaptıysanız C-100 sonucunda eklediğiniz kayıtlar da görünür.

2. Akıştaki SQL adımını okuyun

Source → read.camel.yaml → Designer içinde search-orders akışını açın. Direct girişinin adı API’deki searchOrders işlemiyle eşleşir. SQL adımı veriyi okur; Marshal adımı sonucu JSON metnine çevirir.

- to:
    uri: 'sql:SELECT order_id, customer_id, sku, quantity, status, version FROM orders WHERE customer_id = :#${header.customerId} ORDER BY order_id LIMIT 50'
    parameters:
      dataSource: '#ordersDb'
- marshal:
    json:
      library: Jackson
- setHeader:
    name: Content-Type
    constant: application/json

dataSource, daha önce hazırladığınız bağlantıyı seçer. customerId, bu API’nin query parametresinden header’a gelir. :#${header.customerId} değeri sorguya parametre olarak bağlar; müşteri kodu SQL komutuna dönüşmez. Gelen değeri tırnaklarla SQL metnine birleştirmeyin.

Denemek için müşteri koduna C-100' OR '1'='1 yazabilirsiniz. Böyle bir müşterimiz olmadığı için yine [] gelir; bütün kayıtlar dönmez. Parametre bağlama, kullanıcı yetkisinin yerine geçmez: hangi müşterinin verisini kimin görebileceği gerçek uygulamanızda ayrıca belirlenir.

Sorgu yalnızca kullanılan sütunları ve en fazla 50 kaydı getirir. Bu bir tam dışa aktarma değildir. Daha büyük veri için sıralaması kararlı bir sayfalama tasarlayın; LIMIT değerini kaldırarak tüm tabloyu tek mesaja yüklemeyin.

3. Mesajın nasıl değiştiğini anlayın

NoktaO anda taşıdığı bilgi
Giriş header’ıcustomerId = C-100
SQL’den sonra bodySatırların listesi; her satır sütun adı/değer çiftlerinden oluşur
Marshal’dan sonra bodyJSON metni
Yanıt header’ıContent-Type = application/json

Body adımların işlediği içeriktir ve bir adım tarafından değiştirilebilir. Header mesajın yan bilgileridir; bazıları dış sisteme taşınabilir. Exchange property aynı işlem içinde daha sonra kullanmak üzere sakladığınız bilgidir. Proje ayarı veya veritabanına kalıcı kayıt değildir; sonraki HTTP isteğine kendiliğinden geçmez.

Sorgudan önceki body’ye sonradan ihtiyaç varsa SQL’den önce bir property’ye alın ya da SQL adımındaki outputHeader ile sonucu ayrı bir header’a yazın. Örnekte sipariş eklerken ilk isteği orderRequest property’sinde saklıyoruz.

JSON metni ile işlenebilir nesne de farklıdır. JSON isteğinde quantity alanını okuyabilmek için önce Unmarshal, yanıtı düzgün JSON’a çevirmek için Marshal kullanın. JSON’u metin birleştirerek üretmek tırnak ve kaçış karakterlerinde hataya yol açabilir.

4. Tek bir siparişi bulun

getOrder → Try it içinde orderId = ORD-1001 ile istek gönderin. Bu işlem liste yerine tek bir nesne döndürür:

{"order_id":"ORD-1001","customer_id":"C-100","sku":"TEA-01","quantity":2,"status":"NEW","version":0}

Akışın SQL adımında outputType: SelectOne vardır. Sonuç bulunmazsa body null olur; Choice adımı bunu 404 / ORDER_NOT_FOUND yanıtına çevirir. ORD-9999 ile deneyin. Birden fazla satır üretirse bu seçenek hata verir; tek kayıt beklenen sorgunun veritabanındaki benzersiz anahtarla bunu sağlaması gerekir.

İşKayıt yoksaBir kayıt varsaBirden fazla kayıt varsa
Müşteri siparişlerini ara200, []Tek elemanlı listeListe, en fazla 50 kayıt
Siparişi kimliğiyle oku404, ORDER_NOT_FOUNDTek nesneBu örnekte primary key buna izin vermez

Sonraki adım: Sipariş kaydedin ve sürüm kontrollü güncelleyin.

Lunex’i kendi entegrasyonunuzla görün

Kılavuzda okuduklarınızı kendi sistemlerinizle deneyelim. Demo için bize yazın.