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.
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.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:
- Tanımlı olmayan yola
404, yolu olup yöntemi olmayan isteğe405, bozuk adrese400, sınırdan büyük gövdeye413döner. - İşleyicide yakalanmayan bir hata olursa istemciye yalnızca
500 Sunucu hatasıgider; hatanın ayrıntısı sunucunun kendi çıktısına yazılır, dışarı sızmaz. Dinleadres verilmezse yalnızca bu bilgisayardan gelen istekleri kabul eder (127.0.0.1). Başka cihazlardan erişim içinDinle(8080, '0.0.0.0')yazabilirsiniz.- İstekler sırayla işlenir: bir işleyici bitmeden sonraki başlamaz. Bu, işleyicilerin birbirinin verisini bozamayacağı anlamına gelir; ama uzun süren bir işleyici diğer istekleri bekletir.
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.