{"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\/lv\/blog\/administrirovanie\/nash-opyt-sozdaniya-api-gateway","title":{"rendered":"M\u016bsu pieredze, radot API Gateway","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Da\u017eas uz\u0146\u0113mums, tostarp m\u016bsu klients, att\u012bsta produktu caur partneru t\u012bklu. Piem\u0113ram, lieli interneta veikali ir integr\u0113ti ar pieg\u0101des dienestu \u2014 j\u016bs pas\u016bt\u0101t preci un dr\u012bz sa\u0146emat s\u016bt\u012bjuma izseko\u0161anas numuru. V\u0113l viens piem\u0113rs \u2014 kop\u0101 ar aviobi\u013ceti j\u016bs p\u0113rkat apdro\u0161in\u0101\u0161anu vai bi\u013ceti uz gaisa ekspresi.<\/p>\n<p>T\u0101d\u0113\u013c tiek izmantots viens API, kuru nepiecie\u0161ams pieg\u0101d\u0101t partneriem caur API Gateway. \u0160o uzdevumu m\u0113s ar\u012b risin\u0101j\u0101m. \u0160aj\u0101 rakst\u0101 m\u0113s past\u0101st\u012bsim s\u012bk\u0101k.<\/p>\n<p>Dotais: ekosist\u0113ma un API port\u0101ls ar saskarni, kur\u0101 lietot\u0101ji ir re\u0123istr\u0113ju\u0161ies, sa\u0146em inform\u0101ciju utt. Mums j\u0101izveido \u0113rts un uzticams API Gateway. Proces\u0101 mums bija j\u0101nodro\u0161ina <\/p>\n<ul>\n<li>re\u0123istr\u0101cija, <\/li>\n<li>savienojuma kontrole ar API, <\/li>\n<li>monitorings par to, k\u0101 lietot\u0101ji izmanto beigu sist\u0113mu, <\/li>\n<li>biznesa r\u0101d\u012bt\u0101ju uzskaite.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"M\u016bsu pieredze, radot API Gateway\" src=\"\/wp-content\/uploads\/2019\/04\/4fa66fd4573af16b0bc78aa61173f907.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nRakst\u0101 m\u0113s past\u0101st\u012bsim par m\u016bsu pieredzi, radot API Gateway, kuras laik\u0101 m\u0113s risin\u0101j\u0101m sekojo\u0161us uzdevumus:<\/p>\n<ul>\n<li>lietot\u0101ja autentifik\u0101cija,<\/li>\n<li>lietot\u0101ja autoriz\u0101cija,<\/li>\n<li>ieg\u016bt\u0101 piepras\u012bjuma modific\u0113\u0161ana,<\/li>\n<li>piepras\u012bjuma starpnieko\u0161ana,<\/li>\n<li>atbildes apstr\u0101de.<\/li>\n<\/ul>\n<p>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nIr divi veidi API p\u0101rvald\u012bbas:<\/p>\n<p>1. Standarta, kas darbojas \u0161\u0101di. Pirms piek\u013cuves lietot\u0101js p\u0101rbauda iesp\u0113jas, p\u0113c tam maks\u0101 un integr\u0113 sav\u0101 vietn\u0113. Visbie\u017e\u0101k to izmanto mazajos un vid\u0113jos uz\u0146\u0113mumos.<\/p>\n<p>2. Liels B2B API vad\u012bbas risin\u0101jums, kad uz\u0146\u0113mums vispirms pie\u0146em biznesa l\u0113mumu par savienojumu, k\u013c\u016bst par uz\u0146\u0113muma partneri ar l\u012bgumisku saist\u012bbu, p\u0113c tam piesl\u0113dzas API. Un tikai p\u0113c visu formalit\u0101\u0161u nok\u0101rto\u0161anas uz\u0146\u0113mums sa\u0146em testa piek\u013cuvi, veic test\u0113\u0161anu un non\u0101k ra\u017eo\u0161anas vid\u0113. Bet tas nav iesp\u0113jams bez vad\u012bbas l\u0113muma par savienojumu. <\/p>\n<p><img decoding=\"async\" alt=\"M\u016bsu pieredze, radot API Gateway\" src=\"\/wp-content\/uploads\/2019\/04\/b9ab53d6c64d5a971c4950cd340ad42e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3> M\u016bsu risin\u0101jums<\/h3>\n<p>\n\u0160aj\u0101 da\u013c\u0101 st\u0101st\u012bsim par API Gateway izveidi.<\/p>\n<p>Gal\u012bgie lietot\u0101ji izveidotajam API grozam ir m\u016bsu klienta partneri. Katram no vi\u0146iem jau ir saglab\u0101ti nepiecie\u0161amie l\u012bgumi. Mums b\u016bs tikai j\u0101papla\u0161ina funkcionalit\u0101te, nor\u0101dot pie\u0161\u0137irto piek\u013cuvi grozam. T\u0101d\u0113j\u0101di nepiecie\u0161ams kontrol\u0113ts savienojuma un p\u0101rvald\u012bbas process.<\/p>\n<p>Neap\u0161aub\u0101mi, m\u0113s var\u0113j\u0101m izv\u0113l\u0113ties k\u0101du gatavu risin\u0101jumu API vad\u012bbas uzdevuma un konkr\u0113ti API Gateway izveides risin\u0101\u0161anai. Piem\u0113ram, tas var\u0113tu b\u016bt<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/api-management\/\"> Azure API Management<\/a><\/noindex>. Tas mums neder\u0113ja, jo m\u016bsu gad\u012bjum\u0101 jau bija API port\u0101ls un liela ekosist\u0113ma, kas tika veidota ap to. Visi lietot\u0101ji jau bija re\u0123istr\u0113ti, vi\u0146i jau saprata, kur un k\u0101 vi\u0146i var sa\u0146emt nepiecie\u0161amo inform\u0101ciju. API port\u0101l\u0101 jau bija nepiecie\u0161amie interfeisi, mums tikai vajadz\u0113ja API Gateway. Faktiski tie\u0161i t\u0101 izstr\u0101de ar\u012b bija m\u016bsu uzdevums. <\/p>\n<p>To, ko m\u0113s saucam par API Gateway, var uzskat\u012bt par sava veida proks\u012b. \u0160eit mums atkal bija izv\u0113le \u2014 vai nu rakst\u012bt savu proks\u012b, vai ar\u012b izv\u0113l\u0113ties jau k\u0101du gatavu risin\u0101jumu. \u0160aj\u0101 gad\u012bjum\u0101 m\u0113s izv\u0113l\u0113j\u0101mies otro ce\u013cu un izv\u0113l\u0113j\u0101mies kombin\u0101ciju nginx+Lua. K\u0101p\u0113c? Mums bija nepiecie\u0161ams uzticams, p\u0101rbaud\u012bts programmat\u016bras risin\u0101jums, kas atbalsta m\u0113rogojam\u012bbu. M\u0113s nev\u0113l\u0113j\u0101mies p\u0113c realiz\u0101cijas p\u0101rbaud\u012bt ne biznesa lo\u0123ikas korektumu, ne proks\u012b darb\u012bbu. <\/p>\n<p>Jebkuram t\u012bmek\u013ca serverim ir piepras\u012bjumu apstr\u0101des cauru\u013cvads. Nginx gad\u012bjum\u0101 tas izskat\u0101s \u0161\u0101di:<\/p>\n<p><img decoding=\"async\" alt=\"M\u016bsu pieredze, radot API Gateway\" src=\"\/wp-content\/uploads\/2019\/04\/b4cba1d37cc769202f92df052b45c77e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n(sh\u0113ma no <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/openresty\/lua-nginx-module\">GitHub Lua Nginx<\/a><\/noindex>)<\/p>\n<p>M\u016bsu m\u0113r\u0137is bija iek\u013cauties \u0161aj\u0101 cauru\u013cvad\u0101 taj\u0101 br\u012bd\u012b, kad varam modific\u0113t s\u0101kotn\u0113jo piepras\u012bjumu. <\/p>\n<p>M\u0113s v\u0113lamies izveidot caursp\u012bd\u012bgu proks\u012b, lai funkcion\u0101li piepras\u012bjums paliktu t\u0101ds, k\u0101ds tas bija, kad ierad\u0101s. M\u0113s tikai kontrol\u0113jam piek\u013cuvi gal\u012bgajam API, pal\u012bdzam piepras\u012bjumam non\u0101kt pie t\u0101. Ja piepras\u012bjums bija nepareizs, k\u013c\u016bda j\u0101par\u0101da gal\u012bgajam API, nevis mums. Vien\u012bg\u0101 iemesla d\u0113\u013c, k\u0101p\u0113c m\u0113s varam noraid\u012bt piepras\u012bjumu, ir klienta piek\u013cuves tr\u016bkums. <\/p>\n<p>Nginx jau past\u0101v <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/openresty\/lua-nginx-module\">papla\u0161in\u0101jums<\/a><\/noindex> uz <noindex><a rel=\"nofollow\" href=\"http:\/\/www.lua.ru\/\">Lua<\/a><\/noindex>. Lua ir skripta valoda, t\u0101 ir \u013coti viegla un viegli apg\u016bstama. T\u0101d\u0113j\u0101di nepiecie\u0161amo lo\u0123iku m\u0113s \u012bstenoj\u0101m ar Lua pal\u012bdz\u012bbu. <\/p>\n<p>nginx konfigur\u0101cija (analogija lietotnes mar\u0161rutam), kur tiek veikta visa darbs, ir piln\u012bgi saprotama. \u0160eit ir interesanta p\u0113d\u0113j\u0101 direkt\u012bva \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>\nApskat\u012bsim, kas notiek \u0161aj\u0101 konfigur\u0101cij\u0101: <br \/>\n<b>more_clear_input_headers<\/b> \u2014 no\u0146em nor\u0101d\u012bto virsrakstu v\u0113rt\u012bbas. <br \/>\n<b>lua_need_request_body <\/b>\u2014 regul\u0113, vai pirms rewrite\/access\/access_by_lua direkt\u012bvu izpildes j\u0101izlasa s\u0101kotn\u0113jais piepras\u012bjuma \u0137ermenis vai n\u0113. Noklus\u0113jum\u0101 nginx neizlasa klienta piepras\u012bjuma \u0137ermeni, un, ja jums ir nepiecie\u0161ams piek\u013c\u016bt tam, \u0161ai direkt\u012bvai j\u0101b\u016bt v\u0113rt\u012bbai on.<br \/>\n<b>rewrite_by_lua_file<\/b> \u2014 ce\u013c\u0161 uz skriptu, kur\u0101 aprakst\u012bta lo\u0123ika piepras\u012bjuma modific\u0113\u0161anai.<br \/>\n<b>access_by_lua_file <\/b>\u2014 ce\u013c\u0161 uz skriptu, kur\u0101 aprakst\u012bta lo\u0123ika, kas p\u0101rbauda piek\u013cuves esam\u012bbu resursam. <br \/>\n<b>proxy_pass <\/b>\u2014 URL, uz kuru tiks p\u0101rs\u016bt\u012bts piepras\u012bjums.<br \/>\n<b>body_filter_by_lua_file <\/b>\u2014 ce\u013c\u0161 uz skriptu, kur\u0101 aprakst\u012bta lo\u0123ika piepras\u012bjuma filtr\u0113\u0161anai pirms atgrie\u0161anas klientam.<br \/>\nUn, visbeidzot, <b>post_action<\/b> \u2014 ofici\u0101li neizdokument\u0113ta direkt\u012bva, ar kuras pal\u012bdz\u012bbu var veikt v\u0113l citas darb\u012bbas p\u0113c tam, kad atbilde ir nodota klientam. <\/p>\n<p>T\u0101l\u0101k st\u0101st\u012bsim sec\u012bgi, k\u0101 m\u0113s risin\u0101j\u0101m savas probl\u0113mas.<\/p>\n<h3>Autoriz\u0101cija\/auditi un piepras\u012bjuma modific\u0113\u0161ana<\/h3>\n<p>\n<b>Autoriz\u0101cija<\/b><\/p>\n<p>Autoriz\u0101ciju un autentifik\u0101ciju m\u0113s veic\u0101m, izmantojot piek\u013cuves sertifik\u0101tus. Ir galvenais sertifik\u0101ts. Katram jaunam klientam tiek \u0123ener\u0113ts vi\u0146a person\u012bgais sertifik\u0101ts, ar kuru vi\u0146\u0161 var piek\u013c\u016bt API. \u0160is sertifik\u0101ts tiek iestat\u012bts nginx servera iestat\u012bjumu sada\u013c\u0101.<\/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>Modific\u0113\u0161ana<\/b><\/p>\n<p>Var rasties pamatots jaut\u0101jums: ko dar\u012bt ar sertific\u0113tu klientu, ja m\u0113s p\u0113k\u0161\u0146i v\u0113lamies vi\u0146u atsl\u0113gt no sist\u0113mas? Vai tad nevajadz\u0113tu izsniegt jaunus sertifik\u0101tus visiem p\u0101r\u0113jiem klientiem. <\/p>\n<p>T\u0101d\u0113j\u0101di m\u0113s pak\u0101peniski non\u0101c\u0101m pie n\u0101kam\u0101 uzdevuma \u2014 modific\u0113t s\u0101kotn\u0113jo piepras\u012bjumu. S\u0101kotn\u0113jais klienta piepras\u012bjums visp\u0101r\u012bgi nav der\u012bgs gala sist\u0113mai. Viens no uzdevumiem ir papildin\u0101t piepras\u012bjum\u0101 tr\u016bksto\u0161\u0101s da\u013cas, lai padar\u012btu to der\u012bgu. J\u0101atceras, ka tr\u016bksto\u0161ie dati ir at\u0161\u0137ir\u012bgi katram klientam. M\u0113s zin\u0101m, ka klients pie mums n\u0101k ar sertifik\u0101tu, no kura varam ieg\u016bt pirkstu nospiedumu un izvilkt nepiecie\u0161amos klienta datus no datu b\u0101zes. <\/p>\n<p>Ja k\u0101d\u0101 br\u012bd\u012b b\u016bs nepiecie\u0161ams atsl\u0113gt klientu no m\u016bsu pakalpojuma, vi\u0146a dati pazud\u012bs no datu b\u0101zes un vi\u0146\u0161 nekam nevar\u0113s darboties. <\/p>\n<h3>Darbs ar klienta datiem<\/h3>\n<p>\nMums bija j\u0101nodro\u0161ina augsta risin\u0101juma pieejam\u012bba, \u012bpa\u0161i attiec\u012bb\u0101 uz to, k\u0101 m\u0113s ieg\u016bstam klienta datus. Gr\u016bt\u012bbas ir t\u0101das, ka \u0161o datu prim\u0101rais avots ir tre\u0161\u0101 puse, kas negarant\u0113 nep\u0101rtrauktu un pietiekami augstu darb\u012bbas \u0101trumu. <\/p>\n<p>T\u0101p\u0113c mums bija j\u0101nodro\u0161ina augsta klientu datu pieejam\u012bba. Instrumentam m\u0113s izv\u0113l\u0113j\u0101mies <noindex><a rel=\"nofollow\" href=\"https:\/\/hazelcast.org\/\">Hazelcast<\/a><\/noindex>, kas nodro\u0161ina mums:<\/p>\n<ul>\n<li>\u0100tru piek\u013cuvi datiem,<\/li>\n<li>Iesp\u0113ju izveidot klasteri no vair\u0101k\u0101m mezgl\u0101m ar replik\u0113jiem uz da\u017e\u0101diem mezgliem datiem.<\/li>\n<\/ul>\n<p>\nM\u0113s dev\u0101mies uz vienk\u0101r\u0161\u0101ko datu pieg\u0101des strat\u0113\u0123iju ke\u0161\u0101:<\/p>\n<p><img decoding=\"async\" alt=\"M\u016bsu pieredze, radot API Gateway\" src=\"\/wp-content\/uploads\/2019\/04\/0175d6f0fda543566ab13d4cae9d8cc1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDarbs ar gala sist\u0113mu notiek sesiju ietvaros, un ir ierobe\u017eojums uz maksim\u0101lo skaitu. Ja klients nav aizv\u0113ris sesiju, to b\u016bs j\u0101izdara mums. <\/p>\n<p>Dati par atv\u0113rtu sesiju n\u0101k no gala sist\u0113mas un s\u0101kotn\u0113ji tiek apstr\u0101d\u0101ti Lua pus\u0113. M\u0113s nol\u0113m\u0101m izmantot Hazelcast, lai saglab\u0101tu \u0161os datus job\u0101, kas uzrakst\u012bts .NET. P\u0113c tam ar zin\u0101mu periodiskumu m\u0113s p\u0101rbaud\u0101m atv\u0113rtu sesiju esam\u012bbu un aizveram beigu\u0161\u0101s. <\/p>\n<h3>Piek\u013cuve Hazelcast gan no Lua, gan no .NET<\/h3>\n<p>\nLua klientu darbam ar Hazelcast nav, ta\u010du Hazelcast ir REST API, kuru m\u0113s nol\u0113m\u0101m izmantot. Savuk\u0101rt .NET ir <noindex><a rel=\"nofollow\" href=\"https:\/\/hazelcast.org\/clients\/net\/\">klients<\/a><\/noindex>, caur kuru m\u0113s pl\u0101noj\u0101m piek\u013c\u016bt Hazelcast datiem .NET pus\u0113. Bet tas nesan\u0101ca.<\/p>\n<p><img decoding=\"async\" alt=\"M\u016bsu pieredze, radot API Gateway\" src=\"\/wp-content\/uploads\/2019\/04\/52c9437e5cd16073b56afc55a4f415da.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSaglab\u0101jot datus caur REST un iz\u0146emot caur .NET klientu tiek izmantoti at\u0161\u0137ir\u012bgi serializatori\/deserializatori. T\u0101p\u0113c nav iesp\u0113jams ievietot datus caur REST un iz\u0146emt caur .NET klienta, un otr\u0101di. <\/p>\n<p>Ja b\u016bs interese, m\u0113s s\u012bk\u0101k past\u0101st\u012bsim par \u0161o probl\u0113mu atsevi\u0161\u0137\u0101 rakst\u0101. Spoilera br\u012bdin\u0101jums \u2014 diagramm\u0101. <\/p>\n<p><img decoding=\"async\" alt=\"M\u016bsu pieredze, radot API Gateway\" src=\"\/wp-content\/uploads\/2019\/04\/73bb11214fdaeca86ef10cdbd788e288.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Log\u0113\u0161ana un uzraudz\u012bba<\/h3>\n<p>\nM\u016bsu korporat\u012bvais standarts logu re\u0123istr\u0113\u0161anai caur .NET ir Serilog, visi \u017eurn\u0101li non\u0101k Elasticsearch, un to anal\u012bzi veicam caur Kibanu. Ko l\u012bdz\u012bgu grib\u0113j\u0101m izdar\u012bt ar\u012b \u0161aj\u0101 gad\u012bjum\u0101. Vien\u012bgais <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/DhavalKapil\/elasticsearch-lua\">klients<\/a><\/noindex> risin\u0101jums darbam ar Elastic Lua, kas tika atrasts, saboj\u0101j\u0101s pirmaj\u0101 require. Un m\u0113s izmantoj\u0101m Fluentd. <\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.fluentd.org\/\">Fluentd<\/a><\/noindex> \u2014 atv\u0113rt\u0101 koda risin\u0101jums, lai nodro\u0161in\u0101tu vienotu lietojumprogrammas logu sl\u0101ni. Tas \u013cauj v\u0101kt logus no da\u017e\u0101diem lietojumprogrammas sl\u0101\u0146iem un p\u0113c tam p\u0101rraid\u012bt tos vienot\u0101 avot\u0101. <\/p>\n<p>API Gateway darbojas K8S, t\u0101d\u0113\u013c nol\u0113m\u0101m pievienot konteineru ar fluentd taj\u0101 pa\u0161\u0101 pod\u0101, lai rakst\u012btu logus eso\u0161aj\u0101 atv\u0113rtaj\u0101 tcp port\u0101 fluentd. <\/p>\n<p>M\u0113s ar\u012b izp\u0113t\u012bj\u0101m, k\u0101 r\u012bkosies fluentd, ja tas zaud\u0113s savienojumu ar Elasticsearch. Divu dienu laik\u0101 v\u0101rtiem nep\u0101rtraukti n\u0101ca piepras\u012bjumi, fluentd s\u016bt\u012bja logus, bet fluentd IP adresei bija blo\u0137\u0113ta savienojums ar Elastic. P\u0113c savienojuma atjauno\u0161anas fluentd lieliski p\u0101rraid\u012bja visus logus uz Elastic.<\/p>\n<h3>Secin\u0101jums<\/h3>\n<p>\nIzv\u0113l\u0113tais pielietojuma veids \u013c\u0101va mums pieg\u0101d\u0101t patie\u0161\u0101m funkcion\u0113jo\u0161u produktu ra\u017eo\u0161anas vid\u0113 tikai 2,5 m\u0113ne\u0161u laik\u0101.<\/p>\n<p>Ja k\u0101dreiz jums rad\u012bsies iesp\u0113ja nodarboties ar l\u012bdz\u012bg\u0101m liet\u0101m, iesak\u0101m vispirms skaidri saprast, k\u0101du uzdevumu risin\u0101t un k\u0101di resursi jums jau ir. Esiet uzman\u012bgi pret integr\u0101cijas gr\u016bt\u012bb\u0101m ar eso\u0161ajiem API p\u0101rvald\u012bbas sist\u0113m\u0101m. <\/p>\n<p>Saproti sev, ko tie\u0161i tu pl\u0101no izstr\u0101d\u0101t \u2014 tikai biznesa lo\u0123iku piepras\u012bjumu apstr\u0101dei vai, k\u0101 tas var\u0113ja b\u016bt m\u016bsu gad\u012bjum\u0101, pa\u0161u proksi. Neaizmirsti, ka viss, ko tu izdar\u012bsi pats, v\u0113l\u0101k ir r\u016bp\u012bgi j\u0101p\u0101rbauda.<br \/>\n<br \/>Avots: <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.4 - 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\/lv\/blog\/administrirovanie\/nash-opyt-sozdaniya-api-gateway\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"lv_LV\" \/>\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\/lv\/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\udd47M\u016bsu pieredze API Gateway izveid\u0113 | ProHoster","description":"Da\u017eas uz\u0146\u0113mumi, tostarp m\u016bsu klients, att\u012bsta produktu caur partneru t\u012bklu.","canonical_url":"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/nash-opyt-sozdaniya-api-gateway","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"lv_LV","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\/lv\/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\/lv\/wp-json\/wp\/v2\/posts\/30792","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/comments?post=30792"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts\/30792\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/media\/22777"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/media?parent=30792"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/categories?post=30792"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/tags?post=30792"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}