{"id":30792,"date":"2019-10-31T21:37:27","date_gmt":"2019-10-31T18:37:27","guid":{"rendered":"https:\/\/prohoster.info\/blog\/nash-opyt-sozdaniya-api-gateway\/"},"modified":"2019-10-31T21:37:27","modified_gmt":"2019-10-31T18:37:27","slug":"nash-opyt-sozdaniya-api-gateway","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/nash-opyt-sozdaniya-api-gateway","title":{"rendered":"Eksperienca jon\u00eb n\u00eb krijimin e API Gateway","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Disa kompani, p\u00ebrfshir\u00eb klientin ton\u00eb, zhvillojn\u00eb produktin n\u00ebp\u00ebrmjet nj\u00eb rrjeti partner\u00ebsh. P\u00ebr shembull, dyqanet e m\u00ebdha online jan\u00eb t\u00eb integruara me sh\u00ebrbimin e d\u00ebrges\u00ebs \u2014 ju b\u00ebni porosi p\u00ebr nj\u00eb produkt dhe s\u00eb shpejti merrni numrin e ndjekjes s\u00eb parcel\u00ebs. Nj\u00eb shembull tjet\u00ebr \u2014 s\u00eb bashku me bilet\u00ebn e avionit, ju blini sigurimin ose bilet\u00ebn p\u00ebr aeroport.<\/p>\n<p>P\u00ebr k\u00ebt\u00eb p\u00ebrdoret nj\u00eb API, i cili duhet t'i jepet partner\u00ebve p\u00ebrmes API Gateway. K\u00ebt\u00eb detyr\u00eb ne e zgjidh\u00ebm. N\u00eb k\u00ebt\u00eb artikull do t\u00eb tregojm\u00eb detajet.<\/p>\n<p>Dhe: ekosistemi dhe portali API me nj\u00eb nd\u00ebrfaqe, ku p\u00ebrdoruesit jan\u00eb t\u00eb regjistruar, marrin informacion dhe t\u00eb tjera. Na nevojitet t\u00eb krijojm\u00eb nj\u00eb API Gateway t\u00eb p\u00ebrshtatsh\u00ebm dhe t\u00eb besuesh\u00ebm. N\u00eb proces, na nevojitet t\u00eb sigurojm\u00eb <\/p>\n<ul>\n<li>regjistrimin, <\/li>\n<li>kontrollin e lidhjes me API, <\/li>\n<li>monitorimin e m\u00ebnyr\u00ebs se si p\u00ebrdoruesit p\u00ebrdorin sistemin p\u00ebrfundimtar, <\/li>\n<li>p\u00ebrllogaritjen e treguesve t\u00eb biznesit.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Eksperienca jon\u00eb n\u00eb krijimin e API Gateway\" src=\"\/wp-content\/uploads\/2019\/04\/4fa66fd4573af16b0bc78aa61173f907.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00eb artikull do t\u00eb flasim p\u00ebr p\u00ebrvoj\u00ebn ton\u00eb n\u00eb krijimin e API Gateway, gjat\u00eb s\u00eb cil\u00ebs ne zgjidh\u00ebm detyrat e m\u00ebposhtme:<\/p>\n<ul>\n<li>autorizimi i p\u00ebrdoruesit,<\/li>\n<li>identifikimi i p\u00ebrdoruesit,<\/li>\n<li>modifikimi i k\u00ebrkes\u00ebs fillestare,<\/li>\n<li>proksimi i k\u00ebrkes\u00ebs,<\/li>\n<li>pasprocesimi i p\u00ebrgjigjes.<\/li>\n<\/ul>\n<p>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nKa dy lloje t\u00eb menaxhimit t\u00eb API:<\/p>\n<p>1. Standardi, i cili funksionon n\u00eb k\u00ebt\u00eb m\u00ebnyr\u00eb. Para se t\u00eb lidhet, p\u00ebrdoruesi provon mund\u00ebsit\u00eb, pastaj paguan dhe e integrojn\u00eb n\u00eb faqen e tij. Shumica e her\u00ebve, kjo p\u00ebrdoret n\u00eb bizneset e vogla dhe t\u00eb mesme.<\/p>\n<p>2. Menaxhimi i API p\u00ebr B2B t\u00eb madh, ku kompania fillimisht merr nj\u00eb vendim biznesi p\u00ebr t'u lidhur, b\u00ebhet partner me nj\u00eb kontrat\u00eb obligative, dhe m\u00eb pas lidhet me API. Vet\u00ebm pasi t\u00eb zgjidhin t\u00eb gjitha formalitetet, kompania merr akses prov\u00eb, kalon testimin dhe del n\u00eb prodhim. Por kjo nuk \u00ebsht\u00eb e mundur pa nj\u00eb vendim menaxherial p\u00ebr lidhjen. <\/p>\n<p><img decoding=\"async\" alt=\"Eksperienca jon\u00eb n\u00eb krijimin e API Gateway\" src=\"\/wp-content\/uploads\/2019\/04\/b9ab53d6c64d5a971c4950cd340ad42e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3> Zgjidhja jon\u00eb<\/h3>\n<p>\nN\u00eb k\u00ebt\u00eb pjes\u00eb do t\u00eb flasim p\u00ebr krijimin e API Gateway.<\/p>\n<p>P\u00ebrdoruesit p\u00ebrfundimtar\u00eb t\u00eb k\u00ebtij gateway-i p\u00ebr API jan\u00eb partner\u00ebt e klientit ton\u00eb. P\u00ebr \u00e7do nj\u00eb prej tyre, ne tashm\u00eb kemi kontratat e nevojshme. Na nevojitet vet\u00ebm t\u00eb zgjerrojm\u00eb funksionalitetin, duke sh\u00ebnuar aksesin e dh\u00ebn\u00eb n\u00eb gateway. P\u00ebr rrjedhoj\u00eb, nevojitet nj\u00eb proces i kontrolluar p\u00ebr lidhjen dhe menaxhimin.<\/p>\n<p>Sigurisht, mund t\u00eb ishte e mundur t\u00eb merrnim ndonj\u00eb zgjidhje t\u00eb gatshme p\u00ebr zgjidhjen e problemit t\u00eb menaxhimit t\u00eb API dhe krijimin e API Gateway n\u00eb ve\u00e7anti. P\u00ebr shembull, nj\u00eb e till\u00eb mund t\u00eb ishte<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/api-management\/\"> Azure API Management<\/a><\/noindex>. Nuk s'na p\u00ebrshtati, sepse n\u00eb rastin ton\u00eb ne kishim tashm\u00eb nj\u00eb portal API dhe nj\u00eb ekosistem t\u00eb madh t\u00eb nd\u00ebrtuar rreth tij. T\u00eb gjith\u00eb p\u00ebrdoruesit tashm\u00eb ishin regjistruar, ata e dinin se ku dhe si mund t\u00eb merrnin informacionin q\u00eb u nevojitej. N\u00eb portalin API tashm\u00eb ekzistonin nd\u00ebrfaqet e nevojshme, ne vet\u00ebm na nevojitej API Gateway. N\u00eb fakt, p\u00ebr k\u00ebt\u00eb u angazhuam n\u00eb zhvillim. <\/p>\n<p>Ajo q\u00eb ne e quajm\u00eb API Gateway \u2014 \u00ebsht\u00eb nj\u00eb lloj proksi. Kemi pasur p\u00ebrs\u00ebri nj\u00eb zgjedhje \u2014 mund t\u00eb shkruajm\u00eb proksin ton\u00eb ose t\u00eb zgjedhim di\u00e7ka t\u00eb gatshme. N\u00eb k\u00ebt\u00eb rast, ne zgjodh\u00ebm rrug\u00ebn e dyt\u00eb dhe zgjodh\u00ebm kombinimin nginx+Lua. Pse? Na nevojitej nj\u00eb softuer i besuesh\u00ebm, t\u00eb testuar dhe q\u00eb mb\u00ebshtet shkall\u00ebzimin. Nuk donim q\u00eb pas p\u00ebrfundimit t\u00eb implementimit t\u00eb verifikonim si sakt\u00ebsin\u00eb e logjik\u00ebs biznesore ashtu edhe funksionimin e proksit. <\/p>\n<p>\u00c7do server web ka nj\u00eb pipeline t\u00eb p\u00ebrpunimit t\u00eb k\u00ebrkes\u00ebs. N\u00eb rastin e nginx, ai duket si m\u00eb posht\u00eb:<\/p>\n<p><img decoding=\"async\" alt=\"Eksperienca jon\u00eb n\u00eb krijimin e API Gateway\" src=\"\/wp-content\/uploads\/2019\/04\/b4cba1d37cc769202f92df052b45c77e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n(skema nga <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/openresty\/lua-nginx-module\">GitHub Lua Nginx<\/a><\/noindex>)<\/p>\n<p>Q\u00ebllimi yn\u00eb ishte t\u00eb ishim t\u00eb integruar n\u00eb k\u00ebt\u00eb pipeline n\u00eb momentin kur mund t\u00eb modifikojm\u00eb k\u00ebrkes\u00ebn origjinale. <\/p>\n<p>Ne duam t\u00eb krijojm\u00eb nj\u00eb proksi transparent, q\u00eb k\u00ebrkesa t\u00eb mbetet funksionalisht ashtu si\u00e7 erdhi. Ne vet\u00ebm kontrollojm\u00eb qasjen n\u00eb API-n\u00eb p\u00ebrfundimtare, ndihmojm\u00eb k\u00ebrkes\u00ebn t\u00eb arrij\u00eb atje. N\u00eb rastin kur k\u00ebrkesa ishte e pap\u00ebrshtatshme, gabimin duhet ta tregoj\u00eb API p\u00ebrfundimtar, por jo ne. Arsyet e vetme p\u00ebrse mund t\u00eb refuzojm\u00eb nj\u00eb k\u00ebrkes\u00eb jan\u00eb mungesa e qasjes p\u00ebr klientin. <\/p>\n<p>P\u00ebr nginx tashm\u00eb ekziston <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/openresty\/lua-nginx-module\">zgjerim<\/a><\/noindex> n\u00eb <noindex><a rel=\"nofollow\" href=\"http:\/\/www.lua.ru\/\">Lua<\/a><\/noindex>. Lua \u2014 \u00ebsht\u00eb nj\u00eb gjuh\u00eb skriptuese, \u00ebsht\u00eb shum\u00eb e leht\u00eb dhe e thjesht\u00eb p\u00ebr t'u m\u00ebsuar. N\u00eb k\u00ebt\u00eb m\u00ebnyr\u00eb, logjik\u00ebn e nevojshme e realizuam me ndihm\u00ebn e Lua. <\/p>\n<p>Konfigurimi i nginx (analogjia e aplikacionit route), ku zhvillohet gjith\u00eb puna, \u00ebsht\u00eb mjaft e kuptueshme. E ve\u00e7anta k\u00ebtu \u00ebsht\u00eb direktiva e fundit \u2014 post_action.<\/p>\n<pre><code class=\"nginx\">location \/middleware {\n      more_clear_input_headers Accept-Encoding;\n      lua_need_request_body on;\n      rewrite_by_lua_file 'middleware\/rewrite.lua';\n      access_by_lua_file 'middleware\/access.lua';\n      proxy_pass https:\/\/someurl.com;\n      body_filter_by_lua_file 'middleware\/body_filter.lua';\n      post_action \/process_session;\n}\n<\/code><\/pre>\n<p>\nShikojm\u00eb se \u00e7far\u00eb ndodh n\u00eb k\u00ebt\u00eb konfigurim: <br \/>\n<b>more_clear_input_headers<\/b> \u2014 pastron vler\u00ebn e kokave t\u00eb specifikuara pas direktiv\u00ebs. <br \/>\n<b>lua_need_request_body <\/b>\u2014 rregullon n\u00ebse duhet t\u00eb lexohet trupi origjinal i k\u00ebrkes\u00ebs para se t\u00eb ekzekutohen direktivat rewrite\/access\/access_by_lua ose jo. P\u00ebr default, nginx nuk e lexon trupin e k\u00ebrkes\u00ebs s\u00eb klientit, dhe n\u00ebse ju nevojitet qasja n\u00eb t\u00eb, kjo direktiv\u00eb duhet t\u00eb jet\u00eb on.<br \/>\n<b>rewrite_by_lua_file<\/b> \u2014 rruga p\u00ebr skriptin q\u00eb p\u00ebrshkruan logjik\u00ebn p\u00ebr modifikimin e k\u00ebrkes\u00ebs<br \/>\n<b>access_by_lua_file <\/b>\u2014 rruga p\u00ebr skriptin q\u00eb p\u00ebrshkruan logjik\u00ebn, e cila kontrollon pranueshm\u00ebrin\u00eb p\u00ebr burimin. <br \/>\n<b>proxy_pass <\/b>\u2014 url, nga i cili do t\u00eb proksohet k\u00ebrkesa.<br \/>\n<b>body_filter_by_lua_file <\/b>\u2014 rruga p\u00ebr skriptin q\u00eb p\u00ebrshkruan logjik\u00ebn p\u00ebr filtrimin e k\u00ebrkes\u00ebs para se t'i kthehet klientit.<br \/>\nDhe, n\u00eb fund, <b>post_action<\/b> \u2014 nj\u00eb direktiv\u00eb zyrtare e pa dokumentuar, me ndihm\u00ebn e s\u00eb cil\u00ebs mund t\u00eb kryhen veprime t\u00eb tjera pas dor\u00ebzimit t\u00eb p\u00ebrgjigjes p\u00ebr klientin. <\/p>\n<p>M\u00eb pas do t\u00eb flasim hap pas hapi, si e zgjidh\u00ebm problemin ton\u00eb.<\/p>\n<h3>Autorizimi\/identifikimi dhe modifikimi i k\u00ebrkes\u00ebs<\/h3>\n<p>\n<b>Autorizimi<\/b><\/p>\n<p>Ne krijuam autorizimin dhe identifikimin me ndihm\u00ebn e qasjeve p\u00ebrmes certifikat\u00ebs. Ka nj\u00eb certifikat\u00eb rr\u00ebnj\u00ebsore. \u00c7do klient t\u00eb ri i porosit\u00ebsit i gjenerohet nj\u00eb certifikat\u00eb personale, me t\u00eb cil\u00ebn ai mund t\u00eb ket\u00eb qasje n\u00eb API. Kjo certifikat\u00eb konfigurohet n\u00eb seksionin server t\u00eb cil\u00ebsimeve t\u00eb nginx.<\/p>\n<pre><code class=\"nginx\">ssl on;\nssl_certificate \/usr\/local\/openresty\/nginx\/ssl\/cert.pem;\nssl_certificate_key \/usr\/local\/openresty\/nginx\/ssl\/cert.pem;\nssl_client_certificate \/usr\/local\/openresty\/nginx\/ssl\/ca.crt;\nssl_verify_client on;<\/code><\/pre>\n<p>\n<b>Modifikimi<\/b><\/p>\n<p>Nj\u00eb pyetje e drejt\u00eb mund t\u00eb jet\u00eb: \u00e7far\u00eb t\u00eb b\u00ebjm\u00eb me klientin e certifikuar, n\u00ebse papritur duam ta \u00e7aktivizojm\u00eb at\u00eb nga sistemi? A duhet t\u00eb rishqet\u00ebsojm\u00eb certifikat\u00ebn p\u00ebr t\u00eb gjith\u00eb klient\u00ebt e tjer\u00eb? <\/p>\n<p>K\u00ebshtu kaluam n\u00eb detyr\u00ebn tjet\u00ebr \u2014 modifikimi i k\u00ebrkes\u00ebs origjinale. K\u00ebrkesa origjinale e klientit, n\u00eb p\u00ebrgjith\u00ebsi, nuk \u00ebsht\u00eb e vlefshme p\u00ebr sistemin p\u00ebrfundimtar. Nj\u00eb nga detyrat \u00ebsht\u00eb t\u00eb shtoni n\u00eb k\u00ebrkes\u00eb pjes\u00ebt e mungueshme p\u00ebr ta b\u00ebr\u00eb at\u00eb t\u00eb vlefshme. \u00c7\u00ebshtja \u00ebsht\u00eb q\u00eb t\u00eb dh\u00ebnat e munguara jan\u00eb t\u00eb ndryshme p\u00ebr \u00e7do klient. Ne dim\u00eb q\u00eb klienti vjen te ne me nj\u00eb certifikat\u00eb, me t\u00eb cil\u00ebn mund t\u00eb marrim nj\u00eb gjurm\u00eb dhe t\u00eb nxjerrim nga baza t\u00eb dh\u00ebnat e nevojshme t\u00eb klientit. <\/p>\n<p>N\u00ebse n\u00eb ndonj\u00eb moment do t\u00eb jet\u00eb e nevojshme t\u00eb \u00e7aktivizohet klienti nga sh\u00ebrbimi yn\u00eb, t\u00eb dh\u00ebnat e tij do t\u00eb fshihen nga baza dhe ai nuk do t\u00eb mund t\u00eb b\u00ebj\u00eb asgj\u00eb. <\/p>\n<h3>Puna me t\u00eb dh\u00ebnat e klientit<\/h3>\n<p>\nNa nevojitej t\u00eb sigurojm\u00eb nj\u00eb disponueshm\u00ebri t\u00eb lart\u00eb t\u00eb zgjidhjes, ve\u00e7an\u00ebrisht p\u00ebr m\u00ebnyr\u00ebn se si marrim t\u00eb dh\u00ebnat e klientit. V\u00ebshtir\u00ebsia q\u00ebndron n\u00eb faktin se burimi fillestar i k\u00ebtyre t\u00eb dh\u00ebnave \u00ebsht\u00eb nj\u00eb sh\u00ebrbim i jasht\u00ebm, i cili nuk garanton nj\u00eb funksionim t\u00eb pand\u00ebrprer\u00eb dhe nj\u00eb shpejt\u00ebsi t\u00eb mjaftueshme. <\/p>\n<p>Prandaj na duhej t\u00eb sigurojm\u00eb nj\u00eb disponueshm\u00ebri t\u00eb lart\u00eb t\u00eb t\u00eb dh\u00ebnave t\u00eb klient\u00ebve. Si mjet zgjodh\u00ebm <noindex><a rel=\"nofollow\" href=\"https:\/\/hazelcast.org\/\">Hazelcast<\/a><\/noindex>, i cili na ofron:<\/p>\n<ul>\n<li>qasje i shpejt\u00eb n\u00eb t\u00eb dh\u00ebna,<\/li>\n<li>mund\u00ebsia p\u00ebr t\u00eb organizuar nj\u00eb klaster nga disa node me t\u00eb dh\u00ebna t\u00eb replikueshme n\u00eb node t\u00eb ndryshme.<\/li>\n<\/ul>\n<p>\nNe zgjodh\u00ebm strategjin\u00eb m\u00eb t\u00eb thjesht\u00eb p\u00ebr d\u00ebrgimin e t\u00eb dh\u00ebnave n\u00eb cache:<\/p>\n<p><img decoding=\"async\" alt=\"Eksperienca jon\u00eb n\u00eb krijimin e API Gateway\" src=\"\/wp-content\/uploads\/2019\/04\/0175d6f0fda543566ab13d4cae9d8cc1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBashk\u00ebpunimi me sistemin p\u00ebrfundimtar ndodh brenda sesioneve dhe ka nj\u00eb limit p\u00ebr numrin maksimal. N\u00ebse klienti nuk e mbyll sesionin, k\u00ebt\u00eb do ta b\u00ebjm\u00eb ne. <\/p>\n<p>T\u00eb dh\u00ebnat p\u00ebr sesionin e hapur vin\u00eb nga sistemi p\u00ebrfundimtar dhe fillimisht p\u00ebrpunohen an\u00ebs Lua. Ne vendos\u00ebm t\u00eb p\u00ebrdorim Hazelcast p\u00ebr t\u00eb ruajtur k\u00ebto t\u00eb dh\u00ebna duke p\u00ebrdorur nj\u00eb job t\u00eb shkruar n\u00eb .NET. M\u00eb pas, me nj\u00eb periudh\u00eb t\u00eb caktuar kontrollojm\u00eb t\u00eb drejt\u00ebn p\u00ebr jet\u00eb t\u00eb sesioneve t\u00eb hapura dhe mbyllim ato q\u00eb jan\u00eb skaduar. <\/p>\n<h3>Qasja n\u00eb Hazelcast si nga Lua ashtu edhe nga .NET<\/h3>\n<p>\nNuk ka klient\u00eb p\u00ebr Lua p\u00ebr t\u00eb punuar me Hazelcast, por Hazelcast ka nj\u00eb REST API, t\u00eb cilin e p\u00ebrdor\u00ebm. P\u00ebr .NET gjithashtu ka <noindex><a rel=\"nofollow\" href=\"https:\/\/hazelcast.org\/clients\/net\/\">klient<\/a><\/noindex>, p\u00ebrmes t\u00eb cilit planifikuam t\u00eb merrnim qasje n\u00eb t\u00eb dh\u00ebnat e Hazelcast n\u00eb an\u00ebn e .NET. Por nuk doli ashtu.<\/p>\n<p><img decoding=\"async\" alt=\"Eksperienca jon\u00eb n\u00eb krijimin e API Gateway\" src=\"\/wp-content\/uploads\/2019\/04\/52c9437e5cd16073b56afc55a4f415da.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKur ruajm\u00eb t\u00eb dh\u00ebnat p\u00ebrmes REST dhe nxjerrim p\u00ebrmes klientit .NET, p\u00ebrdoren serializues t\u00eb ndrysh\u00ebm. Prandaj, nuk \u00ebsht\u00eb e mundur t\u00eb vendos\u00ebsh t\u00eb dh\u00ebna p\u00ebrmes REST dhe t\u00eb nxjerr\u00ebsh p\u00ebrmes klientit .NET dhe anasjelltas. <\/p>\n<p>N\u00ebse do t\u00eb ket\u00eb interes, do t\u00eb flasim m\u00eb shum\u00eb mbi k\u00ebt\u00eb problem n\u00eb nj\u00eb artikull t\u00eb ve\u00e7ant\u00eb. Spoiler\u2014n\u00eb diagram. <\/p>\n<p><img decoding=\"async\" alt=\"Eksperienca jon\u00eb n\u00eb krijimin e API Gateway\" src=\"\/wp-content\/uploads\/2019\/04\/73bb11214fdaeca86ef10cdbd788e288.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Logimi dhe monitorimi<\/h3>\n<p>\nStandarti yn\u00eb korporativ p\u00ebr logimin p\u00ebrmes .NET \u00ebsht\u00eb Serilog, t\u00eb gjitha loget p\u00ebrfundojn\u00eb n\u00eb Elasticsearch, analiz\u00ebn e b\u00ebjm\u00eb p\u00ebrmes Kiban\u00ebs. Disa gj\u00ebra t\u00eb ngjashme d\u00ebshironim t\u00eb b\u00ebnim edhe n\u00eb k\u00ebt\u00eb rast. E vetmja <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/DhavalKapil\/elasticsearch-lua\">klient<\/a><\/noindex> p\u00ebr t\u00eb punuar me Elastic n\u00eb Lua, q\u00eb u gjet, u prish n\u00eb k\u00ebrkes\u00ebn e par\u00eb. K\u00ebshtu p\u00ebrdor\u00ebm Fluentd. <\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.fluentd.org\/\">Fluentd<\/a><\/noindex> \u2014 nj\u00eb zgjidhje open source p\u00ebr t\u00eb ofruar nj\u00eb shtres\u00eb t\u00eb integruar logimi t\u00eb aplikacionit. Lejon mbledhjen e logeve nga shtresa t\u00eb ndryshme t\u00eb aplikacionit dhe m\u00eb pas t'i translante ato n\u00eb nj\u00eb burim t\u00eb vet\u00ebm. <\/p>\n<p>API Gateway punon n\u00eb K8S, prandaj vendos\u00ebm t\u00eb shtonim nj\u00eb kontejner me fluentd n\u00eb t\u00eb nj\u00ebjtin pod, p\u00ebr t\u00eb shkruar loget n\u00eb portin tcp t\u00eb hapur t\u00eb fluentd. <\/p>\n<p>Ne gjithashtu hulumtuam se si do t\u00eb veproj\u00eb fluentd n\u00ebse nuk do t\u00eb kishte lidhje me Elasticsearch. Gjat\u00eb dy dit\u00ebve, k\u00ebrkesat vazhdimisht p\u00ebrshkuan portin, loget d\u00ebrgoheshin n\u00eb fluentd, por IP Elastic ishte bllokuar nga fluentd. Pas rikthimit t\u00eb lidhjes, fluentd transferoi gjithsej loget n\u00eb Elastic.<\/p>\n<h3>P\u00ebrfundim<\/h3>\n<p>\nQasja e zgjedhur p\u00ebr realizimin na lejoi t\u00eb dor\u00ebzojm\u00eb nj\u00eb produkt n\u00eb funksionim n\u00eb mjedisin e prodhimit brenda vet\u00ebm 2.5 muajve.<\/p>\n<p>N\u00ebse ndonj\u00ebher\u00eb do t'ju ndodh\u00eb t\u00eb merret me k\u00ebto gj\u00ebra, ne rekomandojm\u00eb q\u00eb n\u00eb radh\u00eb t\u00eb par\u00eb t\u00eb kuptoni qart\u00eb se \u00e7far\u00eb problemi po zgjidhni dhe \u00e7far\u00eb burimesh keni tashm\u00eb. Jini t\u00eb kujdessh\u00ebm ndaj v\u00ebshtir\u00ebsive t\u00eb integrimit me sistemet ekzistuese t\u00eb menaxhimit t\u00eb API-ve. <\/p>\n<p>Kuptoni p\u00ebr vete se \u00e7far\u00eb sakt\u00ebsisht po planifikoni t\u00eb zhvilloni \u2014 vet\u00ebm logjik\u00ebn e biznesit p\u00ebr p\u00ebrpunimin e k\u00ebrkesave apo, si\u00e7 mund t\u00eb kishte ndodhur n\u00eb rastin ton\u00eb, nj\u00eb proxy t\u00eb plot\u00eb. Mos harroni se gjith\u00e7ka q\u00eb b\u00ebni vet\u00eb duhet t\u00eb testohet me kujdes m\u00eb pas.<br \/>\n<br \/>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/true_engineering\/blog\/446438\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043d\u0430\u0448 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a, \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u044e\u0442 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0442\u043d\u0435\u0440\u0441\u043a\u0443\u044e \u0441\u0435\u0442\u044c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0440\u0443\u043f\u043d\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043c\u0430\u0433\u0430\u0437\u0438\u043d\u044b \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0441\u043e \u0441\u043b\u0443\u0436\u0431\u043e\u0439 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u2014 \u0432\u044b \u0437\u0430\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0435 \u0442\u043e\u0432\u0430\u0440 \u0438 \u0432\u0441\u043a\u043e\u0440\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u0442\u0440\u0435\u043a\u0438\u043d\u0433\u043e\u0432\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u043f\u043e\u0441\u044b\u043b\u043a\u0438. \u0414\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u2014 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0430\u0432\u0438\u0430\u0431\u0438\u043b\u0435\u0442\u043e\u043c \u0432\u044b \u043f\u043e\u043a\u0443\u043f\u0430\u0435\u0442\u0435 \u0441\u0442\u0440\u0430\u0445\u043e\u0432\u043a\u0443 \u0438\u043b\u0438 \u0431\u0438\u043b\u0435\u0442 \u043d\u0430 \u0430\u044d\u0440\u043e\u044d\u043a\u0441\u043f\u0440\u0435\u0441\u0441. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d API, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0434\u0430\u0442\u044c \u043f\u0430\u0440\u0442\u043d\u0435\u0440\u0430\u043c \u0447\u0435\u0440\u0435\u0437 API Gateway. \u042d\u0442\u0443 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":22777,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-30792","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043d\u0430\u0448 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a, \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u044e\u0442 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0442\u043d\u0435\u0440\u0441\u043a\u0443\u044e \u0441\u0435\u0442\u044c.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/nash-opyt-sozdaniya-api-gateway\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041d\u0430\u0448 \u043e\u043f\u044b\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f API Gateway | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043d\u0430\u0448 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a, \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u044e\u0442 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0442\u043d\u0435\u0440\u0441\u043a\u0443\u044e \u0441\u0435\u0442\u044c.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/nash-opyt-sozdaniya-api-gateway\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:37:27+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:37:27+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Eksperienca jon\u00eb n\u00eb krijimin e API Gateway | ProHoster","description":"Disa kompani, duke p\u00ebrfshir\u00eb klientin ton\u00eb, e zhvillojn\u00eb produktin n\u00ebp\u00ebrmjet nj\u00eb rrjeti partner\u00ebsh.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/nash-opyt-sozdaniya-api-gateway","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041d\u0430\u0448 \u043e\u043f\u044b\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f API Gateway | ProHoster","og:description":"\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043d\u0430\u0448 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a, \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u044e\u0442 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0442\u043d\u0435\u0440\u0441\u043a\u0443\u044e \u0441\u0435\u0442\u044c.","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/nash-opyt-sozdaniya-api-gateway","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:37:27+00:00","article:modified_time":"2019-10-31T18:37:27+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"30792","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 03:01:22","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 17:05:31","updated":"2026-01-21 03:01:22","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/30792","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=30792"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/30792\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/22777"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=30792"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=30792"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=30792"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}