İçeriğe geç

Kitaplar / Yöntem Birimler ve Araçlar Kılavuzu / 6. Ağ: web servislerine bağlanmak

6. Ağ: web servislerine bağlanmak

Ağ birimi HTTP istekleri gönderir. İstek eşzamanlıdır: program yanıt gelene kadar bekler. Yanıt bir sözlüktür: durum (200, 404…), gövde (metin) ve başlıklar (adları küçük harfli bir sözlük).

Yöntem
program HavaDurumu
kullan Ağ, Veri

değişken
  yanıt: sözlük
  veri: herhangi

başla
  dene
    yanıt := HttpAl('https://api.ornek.de/hava?' + SorguYap(['şehir': 'İzmir', 'birim': 'C']))
    eğer yanıt['durum'] = 200 ise
    başla
      veri := JSONÇöz(yanıt['gövde'])
      yaz('İzmir: ' + veri['sıcaklık'] + ' °C', 1)
    bitir
    değilse yaz('Servis ' + yanıt['durum'] + ' döndürdü', 1)
  yakala (h)
    yaz('Bağlanılamadı: ' + h.mesaj, 1)
  bitir
bitir.

Bu program örnek bir adrese bağlandığı için çıktısı verilmemiştir; adresi kullanacağınız servisinkiyle değiştirebilirsiniz. Dikkat edilecek iki nokta vardır: 404 ya da 500 gibi yanıtlar hata değildir, durum ile denetlenir; sunucuya hiç ulaşılamazsa ya da süre dolarsa dene … yakala ile yakalanabilen bir çalışma hatası oluşur.

Üye Ne yapar
HttpAl(adres [, başlıklar, zamanAşımı]) GET isteği
HttpGönder(adres, gövde [, başlıklar, zamanAşımı]) POST isteği
Httpİstek(yöntem, adres [, gövde, başlıklar, zamanAşımı]) GET, POST, PUT, PATCH, DELETE ya da HEAD
SorguYap(sözlük) a=1&b=x%20y biçiminde sorgu dizgisi
UrlKodla(metin), UrlÇöz(metin) Adreste güvenle kullanılacak biçime çevirir, geri çözer

JSON göndermek için gövdeyi Veri.JSONYap ile üretip türünü başlıkta bildirebilirsiniz:

Yöntem
yanıt := HttpGönder('https://api.ornek.de/notlar', JSONYap(['metin': 'süt al']),
                    ['Content-Type': 'application/json', 'Authorization': 'Bearer ' + anahtar])

Zaman aşımı saniyedir (varsayılan 30). Yanıt en çok 10 MB olabilir ve UTF-8 metin olarak okunur; dosya indirme, akış ve WebSocket yoktur. Başlık değerlerinde yalnızca ASCII karakterler kullanılabilir; Türkçe karakterleri UrlKodla ile kodlamanız gerekir. API anahtarlarını programa yazmak yerine Sistem.Ortam('ANAHTAR') ile ortam değişkeninden okumanızı öneririz.

Komut satırında ve Python’da her adrese bağlanılır. Tarayıcıda (oyun alanı, paketlenmiş uygulamalar) yalnızca buna izin veren sitelere (CORS) bağlanılır ve zaman aşımı uygulanmaz.