Photo by Taylor Vick on Unsplash

TEMEL İNTERNET BİLGİSİ

Internet Ağ Kavramları

Bu yazıda OSI Modelindeki kavramlara biraz daha detaylı anlatarak HTTP üzerinde kurulu sıkça duyduğumuz SOAP, RPC, REST, GraphQL ve Webhook yöntemlerinden bahsedeceğim.

--

Bu yazıda öncelikle TCP/IP Modeli ve bu modelin katmanlarında yer alan Internet , Transport , Application Katmanındaki Protokollerden ve son olarakta HTTP üzerindeki bazı iletişim yöntemlerinden bahsedeceğim.

  • TCP/IP vs OSI Model
  • IPv4, IPv6
  • TCP, UDP
  • HTTP, SMTP, IMAP, POP3, FTP, MQTT, AMQP
  • SOAP, RPC, REST, GraphQL, Webhook

1. TCP/IP vs OSI Model

TCP/IP vs OSI

TCP/IP ve OSI model kavramı iletişimi sağlamak için kabul edilen 2 networking yöntemi. OSI model daha çok kavramsal bir model oluştururken , TCP/IP ise pratikte günümüzde iletişimi sağlamak için kullanılan yöntemdir.

OSI Model içerisine aşağıdan yukarıya doğru baktığımızda Network katmanında IPv4 vs IPv6 adreslemelerini görürsünüz. Transport katmanında TCP, UDP protokollerini ve son olarak Application katmanında HTTP, FTP, SMTP, AMQP protokollerini görürsünüz.

OSI Katmanları

2. IPv4 , IPv6. (Network Katmanı)

Network katmanında IPv4 ve IPv6 bilgisayarların adreslenmesi için kullanılan yöntemlerdir. iPv4 32 bitlik adresleme yaparak 4.3 milyar cihazı birbirine bağlarken, iPv6 128 bitlik adresleme yaparak 340 undecillion cihazı birbirine bağlayacaktır.

Bu da giderek artan internete bağlı mobil iOT cihaz sayısını karşılayabilecek bir altyapı sağlar.

iPv6 iOT ortamının oluşması için sadece adresleme ile ölçeklenebilirliği değil uçtan uca şifreleme ile güvenliği, NAT gibi çözümler olmadan bağlanabilirliği sağlamaktadır.

IPv4 vs IPv6

3. TCP , UDP (Transport Katmanı)

Transport katmanında TCP(Transmission Control Protocol) , UDP(User Datagram Protocol) incelediğimizde bunların veri rotaları ve gideceği adresler tanımlandıktan sonra verinin ilgili adrese gönderilmesini sağlayan protokoller olduğunu görürsünüz. TCP/UDP iki farklı yaklaşımdır.

TCP verinin tam anlamıyla güvenli bir şekilde ilgili adrese ulaşabilmesi için verinin içerisine (Acknowledge Segment) koyar.

HTTP, HTTPS, POP3, SMTP, FTP, SFTP protokolleri TCP üzerinden Three-Way Handshake yapılarak gerçekleşir. iki bilgisayar veya cihaz birbirleri ile anlaşarak, bu iletişimin doğruluğunu garantileyerek bu işlemleri gerçekleştirir.

UDP’de ise paketin karşıya ulaşıp ulaşmadığı kontrol edilmez. Amaç hız ve daha az bant genişliği kullanarak veriyi ulaştırmaktır. TFTP, SNMP gibi protokoller UDP üzerinden bu işlemlerini gerçekleştirir.

4. HTTP, SMTP, IMAP, POP3, FTP, MQTT, AMQP (App Katmanı)

Application Katmanınında HTTP, SMTP, IMAP, POP3,SFTP, FTP/S, MQTT, AMQP gibi farklı protokollerin olduğunu görürsünüz. Bu protokollerden;

  • HTTP/S: Web Browser, Mobil ve Web sunucusu arasındaki iletişimi sağlamak için kullanıldığını Genelde (80/443) portunu kullandığını
  • SMTP, IMAP, POP3: ePosta istemcilerin erişimi için kullanıldığını
  • FTP/S, SFTP(SSH): gibi protokoller dosya transferini sağlayan protokollerdir.
  • AMQP, MQTT, STOMP: gibi protokoller ise mesajlaşma amacı ile oluşturulmuş protokollerdir.
  • MQTT(Message Queue Telemetry Transport) Machine-to-machine (M2M)/”Internet of Things” connectivity protocol yani IOT için hızlı veri alışverişini sağlayan protokoldür.
  • AMQP(Advanced Message Queuing Protocol) ise middleware ile sunucularınızın/worker’larınızın haberleşme yöntemlerini belirler . Bunların birlikte ve güvenli bir şekilde çalışabilmesini sağlar. RabbitMQ, ActiveMQ vb..
  • STOMP (Simple/Streaming Text Oriented Messaging Protocol)

5. HTTP üzerinden Kullanılan RPC, REST ve GraphQL yöntemleri

5.1 SOAP, REST

SOAP ve REST kavramı çok karışan kavramlar olduğu için öncesinde bundan bahsedeyim.

SOAP deyince mimarisel olarak daha çok sistemlerin birbiri ile konuşması için XML tabanlı oluşturulan bir iletişim yöntemi olarak düşünebilirsiniz.

ESB üzerinden SOA Mimari

SOA konusunda önceki yazılarımda bahsetmiştim. Daha detaylı bilgi için bu yazıyı okuyabilirsiniz. Temel olarak iletişim için WSDL oluşturulur.

Java’da bu WSDL kullanılarak Apache AXIS veya Apache CXF kütüphaneleri kullanılarak java client ve aktarım nesnelerinin oluştuğu, güvenlik vb birçok nesnenin oluşturulur.

Bu iletişim sırasında

  • XML schema’lara uygunluk,
  • güvenlik
  • XML ile taşınan nesnenin üretilen pojo nesnelerine dönüştürülmesi gibi bir çok konuyu içerisinde barından Simple Object Access Protokol’dür.

REST (representational state transfer) anlamına gelen Roy Fielding tezi üzerine oluşan istemci-sunucu arasındaki ilişkiyi resource veya toplu resourcelar üzerinden GET,POST,DEL, PUT, PATCH gibi aksiyonlar ile bu kaynakları yönetmeyi amaçlar.

Sunucu tarafında bu nesneler istemci tarafına XML/JSON olarak gönderilir ve aynı formatlarda alınır.

REST’in esas en son aşamada sağladığı Hypermedia ile sunulan yeni metod URL/Adreslerini dönen JSON içerisinden çalıştırabilmesini sağlayarak veri üzerindeki diğer kaynak ve metodlara erişim ve diğer kaynakları değiştirebilme imkanıdır.

Bu konuda daha detaylı bilgi için önceden yazmış olduğum şu yazıyı Rest API’yi nasıl kullanmalıyız (HATEOS) okuyabilirsiniz.

REST’in Facebook, Linkedin, Twitter vb kullanması ile başlayan ve hızla bir API standardı yaygınlaşan REST’in stateless, cacheablility, uniformity özellikleri bu yöntemin bir API olarak kullanılmasını sağladı.

REST vs SOAP

5.2 RPC, REST

Oluşturulan ilk api’ler XML-RPC or SOAP. XML-RPC (remote procedure call) ile gerçekleştiriliyordu. Ama XML’in tanımlama yükü nedeni ile, SOAP temelli bir yapı olması nedeniyle giderek istemci-sunucu ilişkisi JSON temelli hale gelmiştir.

RPC-based API’ler aksiyonlar için güzel bir API oluştururken(prosedür ve komutlar için). —Slack Web API https://api.slack.com/web

REST-based API’ler ise domaini modellemek için (kaynak ve varlıkları), üzerinde CRUD (create, read, update, delete) işlemleri yapmak için uygundur. GitHub Rest API https://developer.github.com/v3/

5.3 REST vs GraphQL

Facebook 2012 yılında mobil uygulamalardan her gün yüz milyarlarca API call yapıldığı için daha , facebook uygulamala geliştiricileri için güçlü bir Facebook Data’sı sağlayacak API sağlayabilmek için geliştirilmiştir.

2012 yılında Facebook ve Linkedin gibi çok kullanıcı uygulamalar tüm sunucu kısımlarını HTML5 tabanlı oluşturmaya çalışıyorlardı , bu mantık o zaman çökmüştü. Mark Zuckerberg bu hatayı kabul edip, native uygulamalara dönmüştü. Bu sırada HTML olarak servis edilen arayüzlerin Restful API olarak tanımladıklarında Model-View nesnelerini sürekli olarak map etmeleri gerektiklerini farketmişler ve bu her istemcinin gelen nesneleri parse etmesi ve kendi nesnesini döndürmesine sebep olacaktı.

Geliştiricilerin kendi ihtiyaçları doğrultusunda (yapısında) geriye cevap dönen bir yapı oluşturmayı dönüştürdüler. Ve ortaya sağlayan GraphQL çıktı.

  • Defines a data shape
  • Hierarchical
  • Strongly typed
  • Protocol, not a storage
  • Introspective
  • Version free
GraphQL

REST => Resource lara URL üzerinden erişim sağlıyordu. (Blog) Kitap yanında ayrıca bir author(yazar) resource getiriyor..

GET /books/1{
"title": "Black Hole Blues",
"author": {
"firstName": "Janna",
"lastName": "Levin"
}
// ... more fields here
}

Note: In the example above, some REST APIs would return “author” as a separate resource.

GraphQL => Şema oluşturuyoruz. Bu şema doğrultusunda istediğimiz sorguları oluşturup, bunlara uygun cevaplar alıyoruz.

GET /graphql?query={ book(id: "1") { title, author { firstName } } }{
"title": "Black Hole Blues",
"author": {
"firstName": "Janna",
}
}

GraphQL’de Book/Author Schema Örneği

type Book {
id: ID
title: String
published: Date
price: String
author: Author
}
type Author {
id: ID
firstName: String
lastName: String
books: [Book]
}

Örneğin:

Webhook (User-Defined HTTP Callbacks)

Bu kısma kadar hep normal API’lerden bahsettik. API (Application Programming Interface) yani bir sistem sizin ile verisini veya fonksiyonunu paylaşmak için API’leri kullanır.

Örneğin: Otel bulmak, restoran bulmak veya bu sistemden mesaj atmasını isteyebilirsiniz vb işlemleri yaptırabilirsiniz. Özetle bir istekte bulunursunuz size bu işi yaparken başarılı/başarısız olduğunu söyler ve işi yapar ve gerekiyorsa istenen veriyi geriye döndürür. (Normal Request/Response)

Webhook Reverse API gibi düşünebilirsiniz. Siz bir uygulamaya register oluyorsunuz, bu uygulamada olay gerçekleşince size bir tetikleme olmasını istiyorsanız bunun için Webhook kullanmalısınız. Farklı uygulamaların birbirleri ile entegrasyon sağlayabilmeleri için Uygulama içerisinde oluşan event’leri HTTP üzerinden JSON Payload’ları ile kendilerine subscribe olan diğer uygulamaları tetiklemesidir.

Bunu Observer Pattern Web’de çalışan uygulamalar için kullanımıda diyebiliriz. Genelde HTTP Rest API , OAuth2 ve JSON teknolojisi kullanılır.

Webhook’da aynı websocket’deki gibi sunucunuzun dışarıdakileri Event yayınlayarak bilgilendirme çabasıdır. Websocket’den farkı ise, websocket browser ile haberleşirken , webhook diğer bir uygulama sunucusu ile haberleşir. (Webhook Nedir ? Entegrasyon Büyüsü) yazımda Webhook hakkında detaylı bilgiye erişebilirsiniz.

Okumaya Devam Et 😃

Bu yazının devamı veya yazı grubundaki diğer yazılara erişmek için bu linke tıklayabilirsiniz.

--

--