{"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\/et\/blog\/administrirovanie\/nash-opyt-sozdaniya-api-gateway","title":{"rendered":"Meie kogemus API Gateway loomisel.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>M\u00f5ned ettev\u00f5tted, sealhulgas meie klient, arendavad toodet partnerite v\u00f5rgustiku kaudu. N\u00e4iteks on suured veebipoed integreeritud kohaletoimetamisteenustega \u2014 te tellite toote ja saate varsti j\u00e4lgimisnumber. Teine n\u00e4ide \u2014 koos lennupiletiga ostate ka kindlustuse v\u00f5i pileti lennujaamabussile.<\/p>\n<p>Selleks kasutatakse \u00fchte API-t, mille tuleb partneritele anda l\u00e4bi API Gateway. Selle \u00fclesande lahendamisega me tegelesime. Selles artiklis jagame \u00fcksikasju.<\/p>\n<p>Kontekst: \u00f6kos\u00fcsteem ja API-portaal, kus kasutajad on registreeritud, saavad teavet jne. Me peame looma mugava ja usaldusv\u00e4\u00e4rse API Gateway. Protsessi k\u00e4igus pidime tagama <\/p>\n<ul>\n<li>registreerimise, <\/li>\n<li>API-\u00fchenduse kontrollimise, <\/li>\n<li>kasutajate tegevuse j\u00e4lgimise l\u00f5pp-s\u00fcsteemis, <\/li>\n<li>\u00e4ri n\u00e4itajate j\u00e4lgimise.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Meie kogemus API Gateway loomisel.\" src=\"\/wp-content\/uploads\/2019\/04\/4fa66fd4573af16b0bc78aa61173f907.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nArtiklis r\u00e4\u00e4gime oma kogemusest API Gateway loomisel, mille k\u00e4igus lahendasime j\u00e4rgmised \u00fclesanded:<\/p>\n<ul>\n<li>kasutaja autentimine,<\/li>\n<li>kasutaja autoriseerimine,<\/li>\n<li>algse p\u00e4ringu muutmine,<\/li>\n<li>p\u00e4ringu edastamine,<\/li>\n<li>vastuse t\u00f6\u00f6tlemine.<\/li>\n<\/ul>\n<p>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nAPI haldamise on kahte t\u00fc\u00fcpi:<\/p>\n<p>1. Standardlahendus, mis t\u00f6\u00f6tab j\u00e4rgmiselt. Enne \u00fchenduse loomist testib kasutaja v\u00f5imalusi, seej\u00e4rel maksab ja integreerib oma saidile. Enim kasutavad seda v\u00e4ike- ja keskmiselt ettev\u00f5tted.<\/p>\n<p>2. Suur B2B API haldamine, kus ettev\u00f5te teeb esmalt \u00e4riotsuse \u00fchenduse loomise kohta, saab ettev\u00f5tte partneriks lepinguliste kohustustega, p\u00e4rast mida \u00fchildub API-ga. Ja p\u00e4rast k\u00f5igi vormistamiste l\u00f5petamist saab ettev\u00f5te testimisjuurdep\u00e4\u00e4su, l\u00e4bib testimise ja l\u00e4heb tootmisse. Kuid see ei ole v\u00f5imalik ilma juhtimisotsuseta \u00fchenduse loomiseks. <\/p>\n<p><img decoding=\"async\" alt=\"Meie kogemus API Gateway loomisel.\" src=\"\/wp-content\/uploads\/2019\/04\/b9ab53d6c64d5a971c4950cd340ad42e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3> Meie lahendus<\/h3>\n<p>\nSelles osas r\u00e4\u00e4gime API Gateway loomise protsessist.<\/p>\n<p>API looja l\u00f5ppkasutajad on meie kliendi partnerid. Iga\u00fche jaoks on meil juba vajalikud lepingud olemas. Peame lihtsalt laiendama funktsionaalsust, m\u00e4rkides antud juurde p\u00e4\u00e4su v\u00e4ravale. Seega on vajalik kontrollitud \u00fchendamise ja haldamise protsess.<\/p>\n<p>Ilmselgelt oleks olnud v\u00f5imalik v\u00f5tta m\u00f5ni valmis lahendus API haldamise ja eriti API Gateway loomiseks. N\u00e4iteks v\u00f5iks selliseks olla<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/api-management\/\"> Azure API Management<\/a><\/noindex>. Meie puhul see ei sobinud, sest meil oli juba API-portaal ja sellele rajatud suur \u00f6kos\u00fcsteem. K\u00f5ik kasutajad olid juba registreeritud ning nad m\u00f5istsid juba, kus ja kuidas nad saavad vajalikku teavet. API-portaalis olid juba olemas vajalikud liidesed, me vajasime vaid API Gateway\u2019d. Just selle arendamisega me kokkuv\u00f5ttes tegelema hakkasime. <\/p>\n<p>Seda, mida me nimetame API Gateway\u2019ks, v\u00f5ib pidada omamoodi p\u00f6\u00f6rdeliseks. Ka siin seisis meil taas ees valik \u2014 kirjutada oma p\u00f6\u00f6rdel v\u00f5i valida juba midagi valmisolevat. Antud juhul l\u00e4ksime teist teed ja valisime kombinatsiooni nginx+Lua. Miks? Me vajasime usaldusv\u00e4\u00e4rset, testitud tarkvara, mis toetaks skaleerimist. Me ei tahtnud p\u00e4rast elluviimist kontrollida mitte ainult \u00e4ri loogika \u00f5igsust, vaid ka p\u00f6\u00f6rdeliidestuse t\u00f6\u00f6 korrektset toimimist. <\/p>\n<p>Igal veebiserveril on p\u00e4ringu t\u00f6\u00f6tlemise konveier. Nginxi puhul n\u00e4eb see v\u00e4lja j\u00e4rgmiselt:<\/p>\n<p><img decoding=\"async\" alt=\"Meie kogemus API Gateway loomisel.\" src=\"\/wp-content\/uploads\/2019\/04\/b4cba1d37cc769202f92df052b45c77e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n(skeem <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/openresty\/lua-nginx-module\">GitHub Lua Nginx<\/a><\/noindex>)<\/p>\n<p>Meie eesm\u00e4rk oli siseneda sellesse konveierisse hetkel, kus me saaksime algset p\u00e4ringut muuta. <\/p>\n<p>Soovime luua l\u00e4bipaistva proxy, et funktsionaalne p\u00e4ring j\u00e4\u00e4ks selliseks, nagu ta on. Kontrollime vaid juurdep\u00e4\u00e4su l\u00f5pp-API-le ja aitame p\u00e4ringul sinna j\u00f5uda. Kui p\u00e4ring oli vale, peab vea n\u00e4itama l\u00f5pp-API, mitte meie. Ainus p\u00f5hjus, miks me p\u00e4ringu tagasi v\u00f5ime l\u00fckata, on kliendi juurdep\u00e4\u00e4su puudumine. <\/p>\n<p>Nginx jaoks on juba olemas <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/openresty\/lua-nginx-module\">laiendust<\/a><\/noindex> j\u00e4rgnevaga <noindex><a rel=\"nofollow\" href=\"http:\/\/www.lua.ru\/\">Lua<\/a><\/noindex>. Lua on skriptikeel, mis on v\u00e4ga kerge ja h\u00f5lpsasti omandatav. Seega rakendasime vajalikku loogikat Lua abil. <\/p>\n<p>Nginxi konfiguratsioon (analoogia rakenduse marsruudiga), kus kogu t\u00f6\u00f6 toimub, on t\u00e4iesti arusaadav. Siin on m\u00e4rkimisv\u00e4\u00e4rne viimane direktiiv \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>\nVaatame, mis toimub selles konfiguratsioonis: <br \/>\n<b>more_clear_input_headers<\/b> \u2014 puhastab direktiivi j\u00e4rel nimetatud p\u00e4iste v\u00e4\u00e4rtuse. <br \/>\n<b>lua_need_request_body <\/b>\u2014 reguleerib, kas tuleb lugeda p\u00e4ritud p\u00e4ringu keha enne rewrite\/access\/access_by_lua direktiivide t\u00e4itmist v\u00f5i mitte. Vaikimisi ei loe nginx kliendi p\u00e4ringu keha, ja kui on vajalik sellele juurde p\u00e4\u00e4seda, peab see direktiiv olema seatud v\u00e4\u00e4rtusele on.<br \/>\n<b>rewrite_by_lua_file<\/b> \u2014 tee skripti, mis m\u00e4\u00e4ratleb p\u00e4ringu muutmise loogika<br \/>\n<b>access_by_lua_file <\/b>\u2014 tee skripti, mis m\u00e4\u00e4ratleb loogika, mis kontrollib juurdep\u00e4\u00e4su olemasolu ressursile. <br \/>\n<b>proxy_pass <\/b>\u2014 url, kuhu p\u00e4ring edastatakse.<br \/>\n<b>body_filter_by_lua_file <\/b>\u2014 tee skripti, mis m\u00e4\u00e4ratleb loogika p\u00e4ringu filtreerimiseks enne selle tagastamist kliendile.<br \/>\nJa l\u00f5puks, <b>post_action<\/b> \u2014 ametlikult dokumenteerimata direktiiv, mis v\u00f5imaldab teha muid toiminguid p\u00e4rast vastuse andmist kliendile. <\/p>\n<p>Edasi r\u00e4\u00e4gime samm-sammult, kuidas me oma \u00fclesandeid lahendasime.<\/p>\n<h3>Autoriseerimine\/autentimine ja p\u00e4ringu modifitseerimine<\/h3>\n<p>\n<b>Autoriseerimine<\/b><\/p>\n<p>Oleme autoriseerimise ja autentimise loonud sertifikaatide p\u00f5hjal. On juursertifikaat. Iga uue kliendi jaoks genereeritakse isiklik sertifikaat, mille kaudu saab ta ligip\u00e4\u00e4su API-le. Selle sertifikaadi seadistamine toimub nginx serveri seadete jaotises.<\/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>Muutmine<\/b><\/p>\n<p>V\u00f5ib k\u00fcsida, mida teha sertifitseeritud kliendiga, kui me \u00e4kki otsustame ta s\u00fcsteemist v\u00e4lja l\u00fclitada? Kas t\u00f5esti, et k\u00f5igi teiste klientide sertifikaate uuesti v\u00e4lja anda. <\/p>\n<p>Nii oleme sujuvalt j\u00f5udnud j\u00e4rgmise \u00fclesandeni \u2014 sisendp\u00e4ringu muutmine. Klientide algne p\u00e4ring ei ole p\u00f5hjapanevalt kehtiv l\u00f5pp-s\u00fcsteemi jaoks. \u00dcks \u00fclesanne on lisada p\u00e4ringusse puuduvaid osi, et muuta see kehtivaks. Asi on selles, et puuduvaid andmeid on igale kliendile erinevalt. Me teame, et klient tuleb meile sertifikaadiga, mille p\u00f5hjal saame v\u00f5tta s\u00f5rmej\u00e4lje ja t\u00f5mmata andmebaasist vajalikud kliendi andmed. <\/p>\n<p>Kui mingil hetkel on vajalik klient meie teenusest eemaldada, siis tema andmed kaovad andmebaasist ja ta ei saa midagi teha. <\/p>\n<h3>Kliendiandmetega t\u00f6\u00f6tamine<\/h3>\n<p>\nMe pidime tagama lahenduse k\u00f5rge k\u00e4tte saadavuse, eriti selle osas, kuidas me kliendiandmeid saame. Probleemiks on see, et nende andmete algallikaks on kolmanda osapoole teenus, mis ei garanteeri katkematut ja piisavalt k\u00f5rget t\u00f6\u00f6kiirus. <\/p>\n<p>Seet\u00f5ttu pidime tagama klientide andmete k\u00f5rge k\u00e4tte saadavuse. T\u00f6\u00f6riistana valisime <noindex><a rel=\"nofollow\" href=\"https:\/\/hazelcast.org\/\">Hazelcast<\/a><\/noindex>, mis pakub meile:<\/p>\n<ul>\n<li>kiiret juurdep\u00e4\u00e4su andmetele,<\/li>\n<li>v\u00f5imalust organiseerida klaster mitmest nodist, millel on replikatsioon erinevates nodides.<\/li>\n<\/ul>\n<p>\nMe valisime k\u00f5ige lihtsama strateegia andmete edastamiseks vahem\u00e4llu:<\/p>\n<p><img decoding=\"async\" alt=\"Meie kogemus API Gateway loomisel.\" src=\"\/wp-content\/uploads\/2019\/04\/0175d6f0fda543566ab13d4cae9d8cc1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nL\u00f5pp-s\u00fcsteemiga t\u00f6\u00f6tamine toimub sessioonide raames ja on maksimaalne piir. Kui klient ei ole sessiooni l\u00f5petanud, peame seda tegema meie. <\/p>\n<p>Avasessiooni andmed saavad l\u00f5pp-s\u00fcsteemist ja t\u00f6\u00f6deldakse alguses Lua poolel. Otsustasime kasutada Hazelcast'i nende andmete salvestamiseks .NET keeles kirjutatud t\u00f6\u00f6juhtmoodulis. Seej\u00e4rel kontrollime perioodiliselt avatud sessioonide eluj\u00f5udlust ja sulgeme aegunud sessioonid. <\/p>\n<h3>P\u00e4\u00e4s Hazelcasti juurde on nii Lua kui ka .NET kaudu.<\/h3>\n<p>\nHazelcasti jaoks ei ole Lua kliente, kuid Hazelcast'il on REST API, mida me otsustasime kasutada. .NET'i puhul on olemas <noindex><a rel=\"nofollow\" href=\"https:\/\/hazelcast.org\/clients\/net\/\">kliendi<\/a><\/noindex>, mille kaudu plaanisime p\u00e4\u00e4seda andmetele Hazelcasti poolt .NET poolel. Kuid mitte nii kiiresti.<\/p>\n<p><img decoding=\"async\" alt=\"Meie kogemus API Gateway loomisel.\" src=\"\/wp-content\/uploads\/2019\/04\/52c9437e5cd16073b56afc55a4f415da.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nREST kaudu andmete salvestamisel ja .NET kliendi kaudu nende t\u00e4iustamisel kasutatakse erinevaid serialiseerijaid\/deserialiseerijaid. Seet\u00f5ttu ei ole v\u00f5imalik andmeid RESTi kaudu sisestada ja seej\u00e4rel .NET kliendi kaudu v\u00e4lja v\u00f5tta ja vastupidi. <\/p>\n<p>Kui on huvilisi, saame sellest probleemist \u00fcksikasjalikumalt r\u00e4\u00e4kida eraldi artiklis. Spoileri jaoks \u2014 skeemil. <\/p>\n<p><img decoding=\"async\" alt=\"Meie kogemus API Gateway loomisel.\" src=\"\/wp-content\/uploads\/2019\/04\/73bb11214fdaeca86ef10cdbd788e288.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Logimine ja j\u00e4lgimine<\/h3>\n<p>\nMeie ettev\u00f5tte standard logimise jaoks .NET'is on Serilog, k\u00f5ik logid j\u00f5uavad viimaks Elasticsearch'i ja nende anal\u00fc\u00fcsi teeme Kibanaga. Midagi sarnast soovisime ka sel juhul teha. Ainult et <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/DhavalKapil\/elasticsearch-lua\">kliendi<\/a><\/noindex> Elasticiga t\u00f6\u00f6tamiseks m\u00f5eldud Lua, mis leiti, purunes juba esimeses require'is. Ja me kasutasime Fluentd-d. <\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.fluentd.org\/\">Fluentd<\/a><\/noindex> \u2014 avatud l\u00e4htekoodiga lahendus, mis tagab rakenduse logimise \u00fchtse kihi. See v\u00f5imaldab koguda logisid erinevatest rakenduse kihtidest ja seej\u00e4rel edastada need \u00fchte allikasse. <\/p>\n<p>API Gateway t\u00f6\u00f6tab K8S-is, seet\u00f5ttu otsustasime lisada konteineri Fluentd sama pod'i, et kirjutada logisid olemasolevasse avatud tcp porti Fluentd. <\/p>\n<p>Uurime ka, kuidas k\u00e4itub Fluentd, kui tal pole \u00fchendust Elasticsearchiga. Kaks p\u00e4eva ajal suunati pidevalt p\u00e4ringud v\u00e4ravasse, Fluentd'le saadeti logisid, kuid Fluentd IP Elasticust blokeeriti. P\u00e4rast \u00fchenduse taastamist edastas Fluentd k\u00f5ik logid Elasticsearchi t\u00e4ielikult.<\/p>\n<h3>Kokkuv\u00f5te<\/h3>\n<p>\nValitud rakenduse l\u00e4henemine v\u00f5imaldas meil toimetada reaalselt t\u00f6\u00f6tava toote tootmiskeskkonda vaid 2,5 kuuga.<\/p>\n<p>Kui kunagi satute tegelema sarnaste asjadega, soovitame esmalt selgelt m\u00f5ista, millist \u00fclesannet te lahendate ja milliseid ressursse teil juba on. Olge ettevaatlikud API haldamise olemasolevate s\u00fcsteemidega integreerimise keerukuste suhtes. <\/p>\n<p>M\u00f5istke ise, mida te kavatsete arendada \u2014 kas ainult \u00e4riloogikat, mis k\u00e4sitleb p\u00e4ringute t\u00f6\u00f6tlemist, v\u00f5i, nagu see oli meie puhul, terve proksi. \u00c4rge unustage, et k\u00f5ik, mida te ise teete, peab hiljem olema p\u00f5hjalikult testitud.<br \/>\n<br \/>Allikas: <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.0.1 - 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. \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\" \/>\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\/et\/blog\/administrirovanie\/nash-opyt-sozdaniya-api-gateway\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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. \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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/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\udd47Meie kogemus API Gateway loomisel | ProHoster","description":"M\u00f5ned ettev\u00f5tted, sealhulgas meie klient, arendavad toodet l\u00e4bi partnerite v\u00f5rgustiku. N\u00e4iteks on suured e-poed integreeritud kohaletoimetamisteenusega \u2014 tellite toote ja varsti saate j\u00e4lgimisnumbriga pakk. Teine n\u00e4ide on see, et koos lennupiletiga ostate ka kindlustuse v\u00f5i pileti aerotranspordile. Selleks kasutatakse \u00fchte API-d, mida tuleb partneritele anda l\u00e4bi API Gateway.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/nash-opyt-sozdaniya-api-gateway","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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. \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","og:url":"https:\/\/prohoster.info\/et\/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\/et\/wp-json\/wp\/v2\/posts\/30792","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=30792"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/30792\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/22777"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=30792"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=30792"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=30792"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}