İçeriğe geç

Kitaplar / Yöntem Birimler ve Araçlar Kılavuzu / 8. Sunucu: web servisleri

8. Sunucu: web servisleri

Sunucu birimi HTTP isteklerini karşılar: bir adrese gelen isteği sizin yazdığınız bir fonksiyona verir, fonksiyonun döndürdüğünü yanıt olarak gönderir.

Yöntem
program SunucuÖrneği
{ Sunucu birimi: yollar, yol parametreleri, JSON yanıtı.
  İstekİşle isteği ağ olmadan işler; gerçek sunucu için sondaki Dinle satırını açın. }
kullan Sunucu

değişken
  y: sözlük

fonksiyon AnaSayfa(istek: sözlük): herhangi
başla
  dön '<h1>Merhaba, ' + istek['sorgu'].Al('ad', 'dünya') + '!</h1>'
bitir

fonksiyon Kare(istek: sözlük): herhangi
değişken n: tamsayı
başla
  n := Tamsayı(istek['parametreler']['n'])
  dön JsonYanıt(['sayı': n, 'kare': n * n])
bitir

başla
  Yol('GET', '/', AnaSayfa)
  Yol('GET', '/kare/:n', Kare)

  y := İstekİşle('GET', '/?ad=Ay%C5%9Fe')
  yaz(Metin(y['durum']) + ' ' + y['gövde'], 1)
  y := İstekİşle('GET', '/kare/12')
  yaz(Metin(y['durum']) + ' ' + y['başlıklar']['content-type'] + ' ' + y['gövde'], 1)
  y := İstekİşle('GET', '/kare/on')
  yaz(Metin(y['durum']) + ' ' + y['gövde'], 1)
  y := İstekİşle('POST', '/kare/3')
  yaz(Metin(y['durum']) + ' ' + y['gövde'], 1)
  y := İstekİşle('GET', '/yok')
  yaz(Metin(y['durum']) + ' ' + y['gövde'], 1)

  { Dinle(8080)      tarayıcıda http://127.0.0.1:8080/kare/12 }
bitir.
Çıktı
200 <h1>Merhaba, Ayşe!</h1>
200 application/json; charset=utf-8 {"sayı": 12, "kare": 144}
500 Sunucu hatası
405 Bu yöntem desteklenmiyor
404 Bulunamadı
İşlev Ne yapar
Yol(yöntem, yol, işleyici) 'GET', 'POST', 'PUT', 'PATCH', 'DELETE' ya da '*' (hepsi) için bir yol tanımlar. :ad ile başlayan parça parametredir
Statik(önEk, klasör) Klasördeki dosyaları (HTML, CSS, resim) sunar; klasörün dışına çıkılamaz
Dinle(port [, adres]) İstekleri dinlemeye başlar ve program durdurulana kadar bekler
Yanıt(durum, gövde [, tür]) Durum kodu ve düz metinle yanıt; tür içerik tipidir
JsonYanıt(değer [, durum]) Sözlük ya da listeyi JSON olarak gönderir
Yönlendir(adres [, durum]) Başka bir adrese yönlendirir (302)
İstekİşle(yöntem, yol [, gövde, başlıklar]) İsteği ağ olmadan işler ve yanıtı döndürür; test için
SunucuyuDurdur Bir işleyicinin içinden çağrılır; yanıt gittikten sonra Dinle sona erer
GövdeSınırı(bayt) Kabul edilen en büyük istek gövdesi (başlangıçta 1 MB)

İşleyici isteği bir sözlük olarak alır: istek['yöntem'], istek['yol'], istek['sorgu'] (adresteki ?ad=değer çiftleri), istek['parametreler'] (yoldaki :ad parçaları), istek['başlıklar'] (adları küçük harfle) ve istek['gövde'] (metin; JSON ise Veri.JSONÇöz ile çözülür). Metin döndürürse bu bir HTML sayfası sayılır; başka her şey için Yanıt, JsonYanıt ya da Yönlendir kullanılır.

Sunucunun kendiliğinden yaptıkları şunlardır:

Sunucu doğrudan internete açılacak biçimde tasarlanmamıştır: HTTPS, sıkıştırma ve aynı anda çok sayıda bağlantı için önüne nginx ya da Caddy gibi bir ters vekil koymanız gerekir. Oturum belirteçleri, parola özeti ve istek sınırlama için Güvenlik birimi (3. bölüm) hazırdır.