{"id":66,"date":"2021-10-05T10:30:00","date_gmt":"2021-10-05T10:30:00","guid":{"rendered":"http:\/\/blog.firatyasar.com\/?p=66"},"modified":"2022-03-28T19:27:47","modified_gmt":"2022-03-28T19:27:47","slug":"api-gateway-overview","status":"publish","type":"post","link":"https:\/\/blog.firatyasar.com\/?p=66","title":{"rendered":"API Gateway Overview"},"content":{"rendered":"\n<p>Geni\u015f \u00e7apta microservice tabanlu uygulama tasarlarken g\u00f6z \u00f6n\u00fcnde bulundurulmas\u0131 gerken baz\u0131 durumlar vard\u0131r. API Gateway kullan\u0131m\u0131 da bu durumlardan birisidir.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"1024\" height=\"532\" src=\"\/wp-content\/uploads\/2022\/03\/image-1024x532.png\" alt=\"\" class=\"wp-image-67\" srcset=\"\/wp-content\/uploads\/2022\/03\/image-1024x532.png 1024w, \/wp-content\/uploads\/2022\/03\/image-300x156.png 300w, \/wp-content\/uploads\/2022\/03\/image-768x399.png 768w, \/wp-content\/uploads\/2022\/03\/image-660x343.png 660w, \/wp-content\/uploads\/2022\/03\/image.png 1386w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>API gateway client taraf\u0131 ile microservice&#8217;lerin aras\u0131nda yer al\u0131r ve bir nevi reverse proxy olarak \u00e7al\u0131\u015f\u0131r. Gelen istekleri arka taraf\u0131nda bulunan microservice&#8217;lere route eder.<br>Ayr\u0131ca \u00fczerinde &#8220;cross-cutting features&#8221; olarak isimlendirilen kimlik do\u011frulama, SSL termination ve cache gibi advanced konfig\u00fcrasyon se\u00e7enekleri de mevcuttur.<\/p>\n\n\n\n<p>Microservice tabanl\u0131 uygulamalar\u0131n\u0131z\u0131n geni\u015fledik\u00e7e baz\u0131 geli\u015fmi\u015f \u00f6zellikleri bunlar \u00fczerinde konfig\u00fcre etmek hem development eforu gerektirecek, hem y\u00f6netimi zorla\u015ft\u0131racak hem de operasyonel i\u015f y\u00fck\u00fc ortaya \u00e7\u0131kartacakt\u0131r. Bu sebeplerden \u00f6t\u00fcr\u00fc a\u015fa\u011f\u0131daki sorular\u0131tasar\u0131m a\u015famas\u0131nda sorarak microservice tabanl\u0131 uygulaman\u0131z\u0131n api gateway gereksinimini belirleyebilirsiniz.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>Client taraf\u0131 bir \u00e7ok microservice&#8217;in bulundu\u011fu mimaride endpointlere yapt\u0131\u011f\u0131 request say\u0131s\u0131n\u0131 nas\u0131l d\u00fc\u015f\u00fcrebilir?<\/strong><\/p>\n\n\n\n<p>Microservice say\u0131s\u0131n\u0131n ve buna ba\u011fl\u0131 olarak endpoint say\u0131s\u0131n\u0131n fazla oldu\u011fu mimarilerde internet \u00fczerinden yap\u0131lan request\/response say\u0131s\u0131 fazla olur. Bu tarz bir yap\u0131da microservice say\u0131s\u0131 artt\u0131k\u00e7a ortam kompleks hale gelir ve latency artar. Burada ideal olan response&#8217;un server taraf\u0131nda toplu olarak handle edilmesidir. Bu tarz server side konfig\u00fcrasyonlar\u0131 ile gecikme azal\u0131rken farkl\u0131 kaynaklardan gelen datalar paralel olarak UI&#8217;ya verilir. B\u00f6ylelikle UI olabildi\u011fince h\u0131zl\u0131 \u015fekilde data&#8217;y\u0131 g\u00f6sterir.<\/p>\n\n\n\n<p><strong>Authorization, Data d\u00f6n\u00fc\u015f\u00fcm\u00fc, dynamic request dispatching nas\u0131l handle edilir? (Cross cutting concerns)<\/strong><\/p>\n\n\n\n<p>Authorization, security vb. cross-cutting gereksinimlerini her microservice \u00f6zelinde handle etmek development eforu gerektirir. Bu sebeple microservice bile\u015fenlerinin private ortamda bulundan Kubernetes,docker vb altyap\u0131larda \u00e7al\u0131\u015fmalar\u0131 ve authorization,security gibi cross-cutting gereksinimlerinin API Gateway gibi merkezi noktalar \u00fczerinde handle edilmesi gerekir.<\/p>\n\n\n\n<p><strong>Client uygulamalar\u0131 HTTP\/HTTPS d\u0131\u015f\u0131nda farkl\u0131 port kullanan servisler ile nas\u0131l ileti\u015fim kurabilir? (AMQP gibi)<\/strong><\/p>\n\n\n\n<p>Bu gibi durumlarda request&#8217;ler HTTP\/HTTPS protokolleri \u00fczerinden gelmeli ve serverside&#8217;\u0131n anlayaca\u011f\u0131 protocol&#8217;e d\u00f6n\u00fc\u015ft\u00fcr\u00fclmelidir.<\/p>\n\n\n\n<p><strong>Mobile uygulamalar i\u00e7in endpointler nas\u0131l \u015fekillendirilebilir?<\/strong><\/p>\n\n\n\n<p>Farkl\u0131 tipte client uygulamalar\u0131 i\u00e7in microservice&#8217;ler taraf\u0131ndan sa\u011flanan endpointler uygun olmayabilir. Yani mobile bir uygulama gereksinimleri ile web uygulamas\u0131na ait gereksinimler farkl\u0131 olabilir. Baz\u0131 durumlarda response&#8217;lar\u0131n optimize edilmesi gerekebilir. Ya da bir \u00e7ok microservice&#8217;ten data toplan\u0131p tek bir yan\u0131t d\u00f6n\u00fclebilir. B\u00f6yle senaryolarda farkl\u0131 client tiplerine cevap verebilmek i\u00e7in client ve microservice&#8217;lerin aras\u0131nda API gateway kullanmak do\u011facak problemleri ortadan kald\u0131r\u0131r.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Geni\u015f \u00e7apta microservice tabanlu uygulama tasarlarken g\u00f6z \u00f6n\u00fcnde bulundurulmas\u0131 gerken baz\u0131 durumlar vard\u0131r. API Gateway kullan\u0131m\u0131 da bu durumlardan birisidir. API gateway client taraf\u0131 ile microservice&#8217;lerin aras\u0131nda yer al\u0131r ve bir nevi reverse proxy olarak \u00e7al\u0131\u015f\u0131r. Gelen istekleri arka taraf\u0131nda bulunan microservice&#8217;lere route eder.Ayr\u0131ca \u00fczerinde &#8220;cross-cutting features&#8221; olarak isimlendirilen kimlik do\u011frulama, SSL termination ve cache\u2026 <span class=\"read-more\"><a href=\"https:\/\/blog.firatyasar.com\/?p=66\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":67,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[24,27,25,26],"_links":{"self":[{"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=\/wp\/v2\/posts\/66"}],"collection":[{"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=66"}],"version-history":[{"count":1,"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=\/wp\/v2\/posts\/66\/revisions"}],"predecessor-version":[{"id":68,"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=\/wp\/v2\/posts\/66\/revisions\/68"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=\/wp\/v2\/media\/67"}],"wp:attachment":[{"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=66"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=66"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.firatyasar.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=66"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}