Msaada wa api ni nini. Madarasa ya ubora wa API kwa injini za dizeli. Mfano wa kupiga kazi ya API

Katika chapisho hili, nilijaribu kukusanya taarifa ambazo zinaweza kuwa muhimu kwa wanaojaribu ambao wanataka kujua API ni nini. Natumai wale wenye uzoefu katika uwanja huo pia watapata kitu muhimu. Mtihani wa API Watu. Kweli, au angalau nisaidie kupata makosa katika nakala yangu :)
API ni nini

API (Kiolesura cha Kuandaa Programu) ni seti ya madarasa yaliyotengenezwa tayari, taratibu, kazi, miundo na vipengele vinavyotolewa na programu (maktaba, huduma) kwa matumizi ya nje. bidhaa za programu(Wikipedia).

Kwa maneno mengine, API inatupa fursa ya kutumia kazi za watu wengine kwa madhumuni yetu wenyewe. Nilikutana na API kwanza Mfano wa Windows API. Hii ni seti ya chaguo za kukokotoa ambazo zinaweza kutumiwa na programu yoyote inayoendesha kwenye OS fulani. Kwa mfano, inaweza kutumia vipengele vya kawaida kutoa kiolesura.

API za kisasa mara nyingi huchukua mfumo wa huduma za wavuti ambazo hutoa habari kwa watumiaji (watu na huduma zingine za wavuti). Kwa kawaida, utaratibu wa kubadilishana taarifa na umbizo la uhamishaji data hupangwa ili pande zote mbili zijue jinsi ya kuingiliana.

Kwenye wavuti https://dev.hh.ru/ (kwa usahihi zaidi, https://github.com/hhru/api/blob/master/docs/general.md) unaweza kupata maelezo ya jinsi wateja wa HeadHunter API na huduma zinaingiliana. Kwa mfano, nukuu kutoka kwa wavuti:

  • API zote hufanya kazi kwa kutumia itifaki ya HTTPS.
  • Uidhinishaji unafanywa kwa kutumia itifaki ya OAuth2.
  • Data yote inapatikana katika umbizo la JSON pekee.
  • URL ya msingi - https://api.hh.ru/
  • Tarehe zimeumbizwa kulingana na ISO 8601: YYYY-MM-DDThh:mm:ss±hhmm
Unaweza kusoma HH API - hii ni mfano mzuri nyaraka za mtumiaji.

Miundo ya usambazaji wa data

Kuna fomati nyingi za data ambazo watumiaji huingiliana na API. Kwa mfano, XML inayojulikana. Au JSON - umbizo nyepesi na lisilo ngumu ambalo linaonekana kama:

( "id": "0001", "type": "donut", "name": "Keki", "image": ( "url": "images/0001.jpg", "width": 200, "height ": 200) P oh ss Hapo chini unaweza kuona majibu yanayotoka MediaWikiAPI , katika miundo tofauti :

JSON:https://en.wikipedia.org/w/api.php?action=query&titles=Albert%20Einstein&prop=info&format=jsonfm
XML: https://en.wikipedia.org/w/api.php?action=query&titles=Albert%20Einstein&prop=info&format=xmlfm
PHP: https://en.wikipedia.org/w/api.php?action=query&titles=Albert%20Einstein&prop=info&format=php ( kwa makini, itatokea kwa kutikisa faili)

HTTP g lagol

Kwa kawaida P Wakati wa kupata API ya wavutikutumia Kuna maombi yote ya HTTP . Ndiyo maanaNinahitaji kusema angalau kwa ufupi mbinu za kawaida, ambayo inaweza kuwa ndani Ombi la HTTP . Mbinu hizi pia huitwa vitenzi vya HTTP :

  • PATA. Pengine aina maarufu zaidi ombi. Inatumika kupokea au kusoma data.
  • WEKA. Desturi n kuhusu na spo Inatumika kusasisha rasilimali .
  • POST. Kawaida hutumiwa kuunda rasilimali mpya.
  • FUTA. Inafuta data.
  • Na wengine
Ikiwa tunataka kupata habari kuhusu rasilimali,URI ambayo http://www.example.com/customers/12345 , tunaweza kutuma ombi:
PATA http://www.example.com/customers/12345

Ikiwa tunataka kusasisha rasilimali - tunaweza kutuma ombi la PUT:
WEKA http://www.example.com/customers/12345/orders/98765

Mara kwa mara PATA maombi uwezo wa kutuma kivinjari. Aina zingine za maombi zinaweza kuhitaji lugha za maandishi au zana maalum(zaidi juu ya hii hapa chini).

Kuhusu HTTP mbinu zinaweza kusomwa kwa undani zaidi katika juu ya W iki.

HTTP kwa njia za majibu

Seva inaweza kutuma kanuni tofauti kwa kujibu maombi ya mtumiaji. Hizi zinaweza kuwa misimbo ya makosa au misimbo tu inayowafahamisha watumiaji kuhusu hali ya seva. Maelezo ya kina inaweza kupatikana tena kwenye wiki.

Nambari zinazojulikana zaidi ni 4xx (matatizo ya upande wa mteja) na 5xx (matatizo ya upande wa seva). Ni juu ya watengenezaji wa API wenyewe kuamua ni misimbo ipi ya kurejesha katika hali fulani. Kwa mfano, API ya tovuti ya Odnoklassniki inarudi nambari, maelezo ambayo yanaweza kupatikana kwenye ukurasa https://apiok.ru/wiki/pages/viewpage.action?pageId=77824003.

Kwa kuongezea, nakushauri usikilize wimbo wa Majibu ya Ombi - ni rahisi na wazi juu ya nambari zilizorejeshwa. Maombi ya HTTP(kuwa mwangalifu, kijana mdogo :)).


REST API

REST API ni itikadi ya chapisho kufurika API, ambayo inasimamiaUhamisho wa Jimbo la Uwakilishi API. Inategemea kanuni zifuatazo zilizoundwa na muumba wake , Roy Fielding:

  1. Usanifu wa seva ya mteja
  2. Seva isiyo na uraia
  3. Cacheability
  4. Muundo wa multilayer
  5. Kiolesura cha Umoja
  6. Kanuni juu ya ombi
Sitaingia kwa undani, lakini ninaweza kuwashauri wale ambao wanataka kusoma juu ya mada

Je! una mbwa. Lakini haongei lugha ya binadamu. Walakini, ana uwezo wa "kumuelewa" kupitia maagizo ambayo alifundishwa wakati wa mchakato wa mafunzo. Ukimwambia mbwa, nani anajua timu"slippers!" kitu kama "Rexik, tafadhali niletee slippers zangu na bunnies kidogo", labda atasikiliza jina, lakini hataleta slippers. Kwa hivyo, API ni seti ya maagizo ambayo mbwa wako anakuelewa na kufanya kile unachohitaji. Hii ni rahisi sana kwa teapot, lakini kiini ni wazi, nadhani.

API ni lugha, njia iliyodhibitiwa ya programu moja ya kompyuta kuwasiliana na nyingine kwa ajili ya utekelezaji wa pamoja wa baadhi. kazi ya pamoja wakati programu moja inatekeleza maombi kutoka kwa mwingine. Kiolesura cha Kuandaa Programu (API) - Kiolesura cha upangaji programu.

Huu ni mlinganisho wa zamani wa dummies ambao walizaliwa nje ya mikono.

Fikiria wageni 5 wanazungumza ... lugha mbalimbali ambao wanahitaji kufanya kazi na kuishi pamoja, sema nchini Urusi. Hakuna hata mmoja wao anayejua lugha ya mwingine, lakini wanahitaji kufanya kazi fulani kama timu moja, kwa majukumu, kwa mfano, kulisha kila mmoja na kujadili ladha ya chakula kwa Kirusi. Ili kufanya hivyo, unahitaji kununua mboga, kupika chakula, kuweka meza na kujadili sahani wakati wa kula. Ili waweze kuelewana na kupata bidhaa ndani ulimwengu wa nje, tuwafunze seti ya msingi Maneno ya Kirusi. Wacha tufikirie kile tulichonacho:

1. Mfaransa

2. Mhispania

4. Mwingereza

5. Kiitaliano

Wacha tusambaze majukumu kati yao ili kufanya kazi ndogo kama ifuatavyo:

Kununua Chakula: Kifaransa na Kihispania

Sahani za kupikia: Kihispania, Kijerumani na Kiingereza

Mpangilio wa Jedwali: Kiingereza na Kiitaliano

Mlo na majadiliano ya ladha Sahani: YOTE

Ili waweze kukamilisha kazi hizi zote, tutafundisha kila mtu seti ya maneno hayo ya Kirusi ambayo itawawezesha kushirikiana na kila mmoja. mazingira ya nje kukamilisha kazi hizi zote. Tazama picha hapa chini.

Hivyo hapa ni. Kundi la marafiki zetu wa kigeni ni kundi programu za kompyuta wanaohitaji kuwasiliana na kila mmoja na kwa mazingira ya nje.

Lugha na Maneno yanayoashiria bidhaa na vitendo vya kimsingi zinazohitaji kuzalishwa hii ni API- viwango ambavyo marafiki zetu wa kigeni huwasiliana kwa Kirusi ili kukamilisha kazi zote ndogo zilizowekwa.

API 1: Maneno kwa Bidhaa na Mahali pa Kununua
API 2: Maneno ya Sahani na Mbinu za Kupikia
API 3: Maneno yanayoashiria Vifaa na Vitendo navyo
API 4: Maneno yanayoashiria Ladha na Tathmini ya Chakula

Inaweza kuwa ngumu zaidi, kwa mfano, acha API 2 iwe Kituruki, API 3 ni Kichina, API 4 ni Kihindi

Mfano kwa dummies:

1. Kuna plagi. Nyuma yake kuna kiasi kikubwa cha teknolojia. Lakini ili kuitumia, unahitaji kuwa na kuziba na umbali kati ya viboko vya 3cm na tundu litatoa 220V. Hii ni kiolesura cha API cha mfumo mkubwa wa uzalishaji wa umeme.

2. Kuna chuma? Ana yake mwenyewe mfumo tata kazi. Lakini ili kufanya kazi na tundu, inaambatana na mahitaji ya API - unahitaji kuziba na umbali wa cm 3 na kwa kujibu inatarajia 220 volts.

Ni hayo tu. Mifumo 2 ni huru, ni kubwa na ngumu. Lakini API imeundwa kufanya kuunganishwa na kila mmoja iwe rahisi iwezekanavyo.

API - interface ya programu ya programu. Hii ni seti fulani ya kazi, mara kwa mara, madarasa na, ikiwezekana, vitu vingine vya kuingiliana na kipande fulani cha programu.

Nadhani njia iliyo wazi zaidi ni kuielezea kwa mfano. Hebu tuseme mtu aliandika kikokotoo ambacho ungependa kutumia katika programu yako. Kikokotoo hiki kinahitaji kufikiwa kwa njia fulani. Njia hizi za kuingiliana na kikokotoo zitaitwa API. Wanaweza kuwa tofauti, na bila maelezo yao hakuna kitu kinachoweza kufanywa. Labda utakuwa na kazi ya kuandika nambari kwenye kumbukumbu, nyingine kutekeleza kitendo, na nyingine kupata matokeo. Au labda utakuwa na kazi moja ambayo itapitisha nambari mbili na msimbo wa operesheni kati yao, na mara moja urudi jibu.

Maelezo kama haya yanafanywa kwa kila kitu. Mfumo wa uendeshaji una API, hii ni seti ya kazi ambayo programu imeundwa: kufunga muunganisho wa mtandao, chora dirisha, chakata kitufe cha kubofya. Mtu fulani Seva ya API ni seti ya kazi ambayo hufanya. Kivinjari hufikia tovuti ya Wikipedia - hutumia API kurudisha jibu kwa ombi lako.

Kufanya kazi na API kunaweza kuthawabisha na kukatisha tamaa. Kwa upande mmoja, kwa kuingiliana na programu zingine, unaweza kuongeza ufikiaji wa hadhira na athari ya "wow" ya programu yako. Kwa upande mwingine, hii inajumuisha kusoma tani nyingi za hati, kusoma mikakati ya uthibitishaji, na kuchanganua ujumbe wa makosa usio na taarifa (au hata kukosa).

Kwanza kabisa, ikiwa bado hauelewi kikamilifu API (Kiolesura cha Kuandaa Programu) ni nini, soma maelezo ya Skillcrush na kisha sehemu ya kwanza ya kifungu hiki ili upate.

"API" ni dhana pana sana - kila wakati programu yako "inapozungumza" na programu nyingine, hufanya hivyo kupitia aina fulani ya API. Vipengele ndani ya programu yako mwenyewe, kama sehemu mbalimbali Reli pia huwasiliana kupitia API. Ni maombi madogo yanayojitegemea zaidi au machache ambayo hutoa data ambayo kila mojawapo inahitaji kutekeleza majukumu yake mahususi. Katika ulimwengu wa programu, kila kitu ni API!

Unapounda programu zilizo na utendaji thabiti zaidi wa mwisho wa mbele (programu za Javascript za ukurasa mmoja na maombi rahisi na simu tofauti za AJAX), watawasiliana na reli ya nyuma kupitia yako API mwenyewe, ambayo kwa kweli ni safu ya ziada au mbili za nambari zinazowaambia watawala wako jinsi ya kutumikia JSON au XML badala ya HTML.

Katika somo hili utajifunza jinsi ya kuunda API yako mwenyewe. Katika masomo yanayofuata tutashughulikia jinsi ya kuingiliana na API za programu zingine. Masomo yanapaswa kuwa chachu nzuri ya kujifunza juu ya mada hii, lakini hakuna uwezekano wa kufunika kesi zote kikamilifu. Sehemu kubwa ya kufanya kazi na API ni kujua jinsi ya kusoma hati zao na kujua wanachotaka kutoka kwako.

Mambo ya Kuzingatia

Kagua maswali na uone ikiwa unajua majibu. Jijaribu tena baada ya kukamilisha kazi.

  • Jinsi Rails inaelewa ni aina gani ya faili unayotarajia kujibu unapotuma ombi la HTTP.
  • Madhumuni ya mbinu ya #jibu_kwa_ni nini?
  • Je, unarudishaje kitu cha Mtumiaji huku ukibainisha sifa ambazo hutaki zijumuishwe kwenye kitu hicho (yaani, huwezi tu kurudisha User.first)?
  • Taja hatua 2 nyuma ya pazia za mbinu ya #to_json.
  • Unaambiaje kitendo cha mtawala kutoa ujumbe wa makosa pekee?
  • Jinsi ya kuunda ujumbe wako wa makosa?
  • Kwa nini huwezi kutumia mbinu za uthibitishaji wa kidhibiti kulingana na kipindi ikiwa unataka kuruhusu miunganisho ya programu kwenye API yako?
  • "Usanifu Unaoelekezwa kwa Huduma" ni nini?

Misingi ya API

Programu yako ya Reli kwa kweli tayari ni API, ingawa unaweza usiifikirie kama API. Kivinjari cha wavuti ambacho watumiaji wako huzindua pia ni programu, kwa hivyo hufanya ombi la API kwa programu yako ya Reli wakati mtumiaji anafungua. ukurasa mpya. Tulikuwa tunafikiria hivi kwa sababu kutoa violezo vya HTML ni kazi ya kawaida sana hivi kwamba tunaweka utendakazi huu kuwa wetu. programu za seva kama aina ya kawaida jibu, na tunaona kila kitu kingine kuwa kitu kisicho cha kawaida.

Hata hivyo, mara nyingi unataka kufanya ombi ambalo halihitaji upitie maumivu ya kichwa ya kutumia kivinjari. Huenda usijali kuhusu muundo wa ukurasa (HTML), lakini kwa kurudi unataka data safi. Hebu tuseme unataka kupata orodha ya watumiaji wote. Unaweza kuomba kitu kama vile http://youapplication.com/users , ambacho kitaanzisha kitendo cha #index na kutoa orodha ya watumiaji wote wa programu.

Lakini kwa nini kujisumbua na haya yote habari zisizo za lazima, ikiwa unachotaka ni kupata orodha ya watumiaji? wengi zaidi chaguo rahisi itatuma ombi kwa URL sawa, ikibainisha matarajio ya jibu la JSON au XML kama malipo. Ukisanidi kidhibiti chako cha Reli kwa usahihi, utapata kitu rahisi cha safu ya JSON kilicho na watumiaji wote. Ajabu!

Kanuni hiyo hiyo inatumika unapowasiliana na API ya nje. Tuseme unataka kupata tweets za hivi majuzi za mtumiaji kutoka Twitter. Unachohitaji kufanya ni kuwaambia programu yako ya Reli jinsi ya kuingiliana na API ya Twitter (yaani, ijithibitishe yenyewe), kutuma ombi, na kuchakata seti ya "tweets" ambazo zitarejeshwa.

Kuunda API

Unaweza kutaka kufanya programu yako ya Reli kuwa API safi ya nyuma kwa kurasa za wavuti za mbele, au unaweza kutaka tu kujifunza jinsi ya kutuma JSON wakati sehemu ya mbele inapoiomba. Sehemu hii haitashughulikia jinsi ya kuunda API kamili za RESTful na vitendaji vya uthibitishaji. Huu ni utangulizi mzuri wa kushughulikia programu yako kama API.

Misingi

Ikiwa unataka programu yako ya Reli irudishe JSON badala ya HTML, utahitaji kumwambia mtawala wako afanye hivyo. Jambo kuu ni kwamba hatua sawa ya mtawala inaweza kurudi Aina mbalimbali kulingana na ikiwa mtumiaji wako anaomba ombi la kawaida kutoka kwa kivinjari au anapata API kupitia safu ya amri. Hii huamua ni aina gani ya ombi lililofanywa kulingana na kiendelezi cha faili iliyoombwa, kama vile example.xml au example.json.

Unaweza kuangalia kile Reli inafikiria juu ya aina ya faili unayotarajia kwa kuangalia logi ya seva:

Ilianza KUPATA "/posts/new" kwa 127.0.0.1 saa 2013-12-02 15:21:08 -0800 Inachakatwa na PostsController#mpya kama HTML

Mstari wa kwanza unakuambia ni URL gani iliyoombwa, na ya pili inakuambia ilitumwa wapi na jinsi Reli huichakata. Ikiwa ungetumia kiendelezi cha .json ingeonekana hivi:

Ilianza PATA "/posts.json" kwa 127.0.0.1 saa 2013-12-04 12:02:01 -0800 Inachakatwa na PostsController#index kama JSON

Ikiwa una mbio maombi ya mtihani, jaribu kuomba URL tofauti. Ikiwa kidhibiti chako hakiwezi kuzishughulikia, unaweza kupata hitilafu, lakini bado unapaswa kuona jinsi Rails inaelewa kuwa maombi yako.

Inatoa JSON au XML

Unapoamua kuwa unataka kujibu maombi na kwa kutumia JSON au XML, utahitaji kumwambia kidhibiti chako kutoa JSON au XML badala ya HTML. Njia moja ya kufanya hivi ni kutumia #respond_to method:

Mdhibiti wa Watumiaji wa Darasa< ApplicationController def index @users = User.all respond_to do |format| format.html # index.html.erb format.xml { render xml: @users } format.json { render json: @users } end end end

KATIKA kwa kesi hii, #respond_to hupitisha kipengee cha umbizo kwenye kizuizi, ambacho unaweza kuambatisha simu inayolingana ya kutoa. Usipofanya lolote, html itatolewa kwa kutumia kiolezo cha kawaida cha Reli (katika mfano huu app/views/index.html.erb).

Chaguo za kukokotoa #render ni mahiri vya kutosha kuelewa jinsi ya kutoa anuwai ya umbizo. Unapoipitisha ufunguo:json , itaita #to_json juu ya thamani iliyo ndani katika mfano huu kwa @watumiaji. Hii itabadilisha kifaa chako cha Ruby kuwa mifuatano ya JSON ambayo itapitishwa kwa programu inayoomba.

Kwa njia hii unapata API yako. Kwa kweli, kuunda API inaweza kuwa ngumu zaidi ikiwa unataka kufanya mambo ya kupendeza, lakini yote yanashikamana na misingi.

Kubainisha Sifa Zilizorejeshwa

Wacha tuseme unataka kuhakikisha kuwa haurudishi anwani ya barua pepe ya mtumiaji pamoja na kitu cha Mtumiaji. Katika kesi hii, utataka kubadilisha sifa ambazo zitarejeshwa, kurekebisha kile ambacho njia ya #to_json hufanya.

Hapo awali, ungekuwa umebatilisha tu njia ya #to_json na toleo lako, lakini sasa hutahitaji - kwa kweli, badala yake utabatilisha njia ya #as_json. Njia ya #as_json inatumika katika njia ya #to_json, kwa hivyo urekebishaji wake hubadilisha kabisa matokeo ya #to_json , lakini kwa njia maalum.

#to_json hufanya mambo 2: inaendesha #as_json na kupata heshi ya sifa ambazo zitatolewa kwa JSON. Kisha inapeana kwa JSON kwa kutumia ActiveSupport::json.encode . Kwa hivyo kwa kurekebisha #as_json unakuwa mahususi zaidi kuhusu sehemu ya njia ya #to_json ambayo kwa kweli unataka kubadilisha.

Kwa upande wetu, tunafanya hivi kwa kurekebisha #as_json katika mfano wetu ili kurudisha sifa tu tunazohitaji:

# app/models/user.rb class User< ActiveRecord::Base # Вариант 1: Полное переопределение метода #as_json def as_json(options={}) { :name =>self.name ) # USIJUMUISHE sehemu ya mwisho ya barua pepe # Chaguo 2: Tumia njia ya kawaida#as_json def as_json(options=()) super(pekee: [:name]) mwisho mwisho

Kisha, kidhibiti chetu kitahitaji tu kutoa JSON kama kawaida (katika mfano ulio hapa chini, JSON itarejeshwa kila wakati, bila kujali kama ombi la HTML lilitumwa au la):

# app/controllers/users_controller.rb UsersController darasa< ApplicationController def index render json: User.all end end

Kumbuka kuwa hauitaji kupiga simu #to_json mwenyewe unapotumia #render - itakufanyia hivi.

Wakati mwingine Heroku inaweza kuhitaji hatua za ziada ili kuonyesha kurasa zako kwa usahihi na makosa. Angalia. Huenda ukahitaji kuondoa kurasa tuli kutoka kwa saraka ya programu/umma kwanza.

Kuhakikisha usalama kutoka nje

Wacha tuseme unataka kuruhusu ufikiaji wa API ikiwa tu mtumiaji ameingia. Uthibitishaji wako uliopo kwenye kidhibiti tayari unafanya kazi hii - hakikisha kuwa una seti sahihi ya #kabla_ya_kitendo (k.m. kabla_hatua:inahitaji_kuingia). Huenda ukahitaji utendakazi ambapo watumiaji walioingia na wasioingia wanaweza kutazama ukurasa, lakini kila mmoja anapaswa kuona data tofauti. Hutaki watumiaji ambao hawajaidhinishwa waweze kupiga simu za API ili kupata data nyeti. Vile vile, hutaki kuruhusu watumiaji wasioidhinishwa kutembelea kurasa fulani za HTML.

Ikiwa unataka kushughulikia maombi kutoka kwa programu ambayo si kivinjari (kwa mfano, kutoka mstari wa amri), huwezi kutegemea vidakuzi vya kivinjari kwa uthibitishaji. Hii ndio sababu API nyingi hutumia ishara asili kama sehemu ya mchakato wa uthibitishaji. Tutazungumza zaidi kuhusu ishara katika somo linalofuata.

Hatua zinazofuata

Sasa una ujuzi wa kutumia programu yako ya Reli kutoa sio tu HTML, lakini umbizo lingine lolote pia. Ikiwa ungependa kwenda mbali zaidi na kuruhusu wasanidi programu wengine kuunda vitu kwa kutumia jukwaa lako (kwa mfano, ili waweze kutuma maombi ya kiprogramu badala ya kuthibitisha kama mtumiaji), utahitaji kufanya mfumo wako wa API kuwa thabiti zaidi. Hatutashughulikia yote hapa, lakini angalia yafuatayo:

  • Nakala ya API za Kuunda Reli za Kushangaza inaelezea njia nyingi bora za kuhama kutoka kwa programu ya kuchezea kuelekea viwango vya API vya viwandani.

Usanifu unaozingatia huduma

Ni wakati wa kutambulisha mbinu ya usanifu chini ya jina "Usanifu Unaoelekezwa kwa Huduma" (SOA). Wazo la msingi ni kwamba maombi yako yatakuwa na huduma nyingi, kama vile mfumo wa malipo, usajili wa mtumiaji, moduli ya mapendekezo, n.k. Badala ya kuijenga yote ndani ya programu moja kuu, unavunja mifumo ndogo kuwa vipande huru kabisa ambavyo vinawasiliana kwa kutumia API za ndani.

Hii ni nzuri kwa sababu nyingi. Kwa sababu kila sehemu ya programu yako haijali jinsi sehemu zingine zinavyofanya kazi na inajua tu jinsi ya kuomba data kupitia API yao, unaweza kufanya mabadiliko makubwa kwenye msimbo wa huduma na programu nyingine itafanya kazi kama hapo awali. Unaweza kubadilisha kabisa huduma moja na nyingine, na mradi tu inawasiliana kwa kutumia njia sawa za API, itaenda vizuri sana. Unaweza kutumia API za nje kama sehemu ya programu yako (km mifumo ya malipo) badala ya kuandika yako mwenyewe. Unaweza kuunda programu ya PHP inayowasiliana na programu ya Python inayowasiliana na programu ya Reli, na kila kitu kitafanya kazi kwa sababu wanawasiliana kwa kutumia API.

Kama kanuni ya jumla, jaribu kufanya kila sehemu ya programu yako iwe huru iwezekanavyo - wazo nzuri. Wazo la SOA hukulazimisha kufikiria ni njia gani unataka kufichua sehemu zingine za programu yako, ambayo pia itafanya nambari yako kuwa bora zaidi. Kwa kuongeza, kwa kudhani kuwa kila sehemu kuu ya programu yako ni huru, utaweza pia kutenga matatizo kwa urahisi zaidi na kushughulikia makosa kwa njia ya maana zaidi.

Kutumia usanifu unaolenga huduma kwa programu nzima ni kama kuvunja hati kubwa ya Ruby katika madarasa na mbinu nadhifu, kwa kiwango kikubwa zaidi.

Mojawapo ya kesi maarufu zaidi za mpito kwa usanifu unaoelekezwa kwa huduma ni Amazon.com. Siku moja katika 2002, Jeff Bezos alisema kwa uwazi kwamba vikundi vyote vya kazi lazima vihamie SOA au vifutwe. Sifa mbaya chapisho la blogi Mfanyakazi wa Google, aliyekusudiwa kwa madhumuni ya ndani lakini kwa bahati mbaya kuwekwa hadharani, alizungumza kuhusu nguvu ya Amazon kwa kutumia SOA. Ni usomaji mzuri, kwa hivyo hakikisha umeiangalia, lakini vidokezo kuu vya barua ya Bezos vimefupishwa katika nukuu zifuatazo kutoka kwa chapisho:

1) Timu zote sasa hutoa data na utendaji wao kupitia miingiliano ya huduma.

2) Timu lazima ziwasiliane kupitia miingiliano hii.

3) Fomu zingine mawasiliano ya mwingiliano marufuku: hakuna viungo vya moja kwa moja, hakuna usomaji wa moja kwa moja wa data ya amri nyingine, hakuna mifano kumbukumbu iliyoshirikiwa, hakuna backdoors au kama. Njia pekee inayoruhusiwa ya mwingiliano ni kufikia kiolesura cha huduma kwenye mtandao.

4) Haijalishi wanatumia teknolojia gani. HTTP, Corba, Pubsub, itifaki za wamiliki - hakuna tofauti. Bezos hajali.

5) Miingiliano yote ya huduma, bila ubaguzi, lazima iandaliwe awali na uwezo wa kudhibitiwa nje. Hiyo ni, timu lazima ipange na kubuni ili kuweza kutoa kiolesura kwa wasanidi programu nje ya kampuni. Hakuna ubaguzi.

6) Yeyote atakayepuuza mahitaji haya atafukuzwa kazi.

SOA ni biashara kubwa. Hakika, kuna matatizo mengi yanayotokea wakati wa kuitumia - angalia chapisho hili kuhusu "masomo ya kujifunza" ya Amazon - lakini ina kiasi cha ajabu cha faida.

Pengine hutahangaika sana kuhusu SOA unapojitengenezea programu za vichezeo, lakini hakika ni suala litakalojitokeza utakapoanza kufanya kazi kwa kampuni ya TEHAMA, kwa hivyo kuifahamu ni mazoezi mazuri.

Lengo lako

  1. Soma Sehemu ya 7 ya Mwongozo wa Vidhibiti vya Reli ili ujifunze kuhusu uwasilishaji wa JSON na XML.
  2. Hazihitajiki kutazamwa (kwa sababu zinaenda mbele kidogo kuliko tulivyotayarishwa sasa), lakini ikiwa una nia, angalia Railscasts chini ya. Rasilimali za ziada chini ya somo ili kujifunza zaidi kuhusu faida za API.

Hitimisho

Tutafanya kazi kwa karibu zaidi na programu yako kama API wakati wa kozi ya Javascript. Katika kozi hii, utaunda programu nyingi kamili zinazotumia simu za AJAX kuwa bora kiolesura cha mtumiaji, ambayo inahusisha utoaji wa XML au data ya JSON badala ya ukurasa kamili wa HTML. Kisha utaunda programu nyingi za Javascript za ukurasa mmoja ambazo zinategemea API iliyotolewa na programu yako ya Rails kuleta data zote muhimu kutoka kwa hifadhidata, lakini vinginevyo endesha upande wa mteja (kwenye kivinjari).

Njia bora ya kuelewa API ni kuunda na kuingiliana nayo, ambayo ndiyo tutazingatia katika miradi yetu.

Labda umeona neno "API". Mfumo wa uendeshaji, kivinjari cha wavuti, na masasisho ya programu mara nyingi hutangaza API mpya za wasanidi programu. Lakini API ni nini?

Kiolesura cha Kuandaa Programu

Neno API ni kifupi na linasimamia Kiolesura cha Kuandaa Programu.

API ni kama menyu katika mkahawa. Menyu ina orodha ya sahani ambazo unaweza kuagiza, pamoja na maelezo ya kila sahani. Unapotaja ni vitu gani vya menyu unavyotaka, jikoni ya mgahawa hufanya kazi na kukupa sahani zilizokamilishwa. Hujui jinsi mgahawa unavyotayarisha chakula hiki, na huhitaji kufanya hivyo.

Vile vile, API hutoa shughuli nyingi ambazo watengenezaji wanaweza kutumia, pamoja na maelezo ya kile wanachofanya. Msanidi hawana haja ya kujua jinsi, kwa mfano, mfumo wa uendeshaji umeundwa na sanduku la mazungumzo la Hifadhi Kama linaonyeshwa. Wanahitaji tu kujua kuwa inapatikana kwa matumizi katika programu.

Hii si sitiari kamili kwani wasanidi wanaweza kulazimika kutoa data yao ya API ili kupata matokeo, kwa hivyo labda ni kama mkahawa wa kifahari ambapo unaweza kutoa baadhi ya viungo vyako kwa jikoni kufanya kazi navyo.

API huruhusu wasanidi programu kuokoa muda kwa kuchukua fursa ya utekelezaji wa jukwaa kutekeleza kazi muhimu. Hii husaidia kupunguza idadi ya msimbo wa kuunda na pia husaidia kuunda uthabiti kati ya programu kwenye jukwaa moja. API zinaweza kudhibiti ufikiaji wa maunzi na rasilimali za programu.

API hurahisisha maisha kwa wasanidi programu

Hebu tuseme unataka kuendeleza programu tumizi ya iPhone. mfumo wa uendeshaji Apple iOS hutoa idadi kubwa ya API ni kama mfumo mwingine wowote wa kufanya kazi ili kurahisisha hili kwako.

Kwa mfano, ikiwa unataka kupachika kivinjari ili kuonyesha ukurasa mmoja au zaidi za wavuti, sio lazima upange kivinjari chako cha wavuti kutoka mwanzo kwa ajili ya programu yako tu. Wewe
Unaweza kutumia API ya WKWebView kupachika kivinjari cha wavuti cha WebKit (Safari) kwenye programu yako.

Ikiwa unataka kuchukua picha au video kutoka Kamera za iPhone Huna haja ya kuandika kiolesura chako cha kamera. Unaweza kutumia API ya Kamera kupachika kamera ya iPhone kwenye programu yako. Ikiwa API haikuwepo, wasanidi programu wangelazimika kuunda programu yao ya kamera na kufasiri ingizo vifaa kamera. Lakini watengenezaji wa chumba cha uendeshaji Mifumo ya Apple imefanya kazi hii ngumu kwa hivyo wasanidi wanaweza kutumia API ya kamera kupachika kamera na kisha kuendelea kuandika programu yao. Na wakati Apple inaboresha API ya kamera, programu zote zinazoitumia zitachukua faida ya uboreshaji huo kiotomatiki.

Hii inatumika kwa majukwaa yote. Kwa mfano, unataka kuunda kisanduku cha mazungumzo katika Windows? Kuna API ya hii. Je, ungependa kutumia uthibitishaji wa alama za vidole kwenye Android? Kuna API ya hii, kwa hivyo sio lazima ujaribu kila kitambua alama za vidole kutoka kwa kila mtengenezaji wa Android. Watengenezaji si lazima watengeneze gurudumu tena na tena.

API hudhibiti ufikiaji wa rasilimali

API pia hutumiwa kudhibiti ufikiaji wa vifaa vya maunzi na utendakazi programu, ambayo huenda programu haina kibali cha kutumia. Hii ndiyo sababu API mara nyingi huchukua jukumu kubwa katika usalama.

Kwa mfano, ikiwa umewahi kutembelea tovuti na kuona ujumbe kwenye kivinjari chako kwamba tovuti inauliza eneo lako halisi, tovuti hiyo inajaribu kutumia API ya eneo la eneo kwenye kivinjari chako. Vivinjari vya wavuti hutoa API ili kurahisisha kwa watengenezaji wa wavuti kufikia eneo lako - wanaweza kuuliza "uko wapi?" na kivinjari kitafanya kazi ngumu ya kufikia GPS yako au karibu nawe. Mitandao ya Wi-Fi kupata eneo lako halisi.

Hata hivyo, vivinjari pia hufichua maelezo haya kupitia API kwa sababu ufikiaji wake unaweza kudhibitiwa. Wakati tovuti inataka kufikia eneo lako halisi, njia pekee ipitishe API ya Mahali. Na, tovuti inapojaribu kuitumia, wewe—mtumiaji—unaweza kuruhusu au kukataa ombi. Upatikanaji wa rasilimali za vifaa kama vile Sensor ya GPS, inawezekana tu kupitia API, kwa hivyo kivinjari kinaweza kudhibiti ufikiaji wa maunzi na kikomo uwezo wa programu.

Kanuni hiyo hiyo hutumiwa kwa simu za mkononi za kisasa. mifumo ya uendeshaji, kama vile iOS na Android, wapi maombi ya simu kuwa na ruhusa zinazoweza kutekelezwa kwa kudhibiti ufikiaji wa API. Kwa mfano, ikiwa msanidi programu atajaribu kufikia kamera kupitia API ya kamera, unaweza kukataa ombi la ruhusa na programu haitakuwa na idhini ya kufikia kamera ya kifaa chako.

Mifumo ya faili inayotumia ruhusa, kama Windows, Mac na Linux, ina ruhusa hizo ambazo zinatekelezwa na API mfumo wa faili. Maombi ya kawaida haina ufikiaji wa moja kwa moja kwa mbichi ya mwili gari ngumu. Badala yake, programu lazima ifikie faili kupitia API.

API hutumiwa kwa mawasiliano kati ya huduma

API pia hutumiwa kwa sababu zingine. Kwa mfano, ikiwa umewahi kuona kitu cha Ramani za Google kilichopachikwa kwenye tovuti, tovuti hiyo hutumia API ya Ramani za Google kupachika ramani hiyo. Google hutoa API kama hizi kwa wasanidi wavuti, ambao wanaweza kutumia API kukusanya vitu tata moja kwa moja kwenye tovuti yako. Ikiwa API kama hizo hazipo, wasanidi wanaweza kulazimika kuunda zao kadi mwenyewe na utoe maelezo yako ya kadi ili kushughulikia ndogo ramani ya mwingiliano kwenye tovuti.

Na kwa kuwa ni API, Google inaweza kudhibiti ufikiaji ramani za google kwenye tovuti za watu wengine, kuhakikisha kwamba wanaitumia kwa njia thabiti badala ya kujaribu kutekeleza bila mpangilio muundo ambao tovuti inaonyesha. ramani za google, Kwa mfano.

Hii inatumika kwa huduma nyingi tofauti za mtandaoni. Kuna API za kuomba tafsiri ya maandishi kutoka Google Tafsiri au kuonyesha Maoni ya Facebook au tweets kutoka Twitter kwenye tovuti.

Kiwango cha OAuth pia kinafafanua idadi ya API zinazokuruhusu kuingia kwenye tovuti kupitia huduma nyingine, kama vile kutumia kitambulisho chako cha kuingia. Machapisho ya Facebook, Google au Twitter ili kuingia kwenye tovuti mpya bila kuunda mpya akaunti mtumiaji wa tovuti hii pekee. API ni mikataba ya kawaida inayofafanua jinsi wasanidi programu huingiliana na huduma na aina ya matokeo ambayo wasanidi wanapaswa kutarajia kupokea.

Ikiwa umesoma nakala hii, utakuwa na wazo bora la API ni nini. Hatimaye, huhitaji kujua API ni nini isipokuwa wewe ni msanidi programu. Lakini ukiona hivyo jukwaa la programu au huduma imeongezwa API mpya kwa maunzi au huduma tofauti, inapaswa kuwa rahisi kwa watengenezaji kutumia vipengele hivyo.

Ili kurahisisha kazi ya wenzao na kutoa programu zote za Windows na kiolesura cha ulimwengu wote, watengenezaji wa programu za Microsoft waliunda kitu kama API - "Kiolesura cha Programu ya Maombi".

Hii ni seti ya kazi na taratibu ambazo zinaweza kutumika mara nyingi na programu: kuonyesha mti wa saraka, kutafuta faili, kuonyesha dirisha la kawaida na vifungo vya karibu, kupunguza na kuongeza, na wengine wengi. Kama matokeo, msanidi programu anayeunda programu ya Windows sio lazima afikirie na kukuza subroutines maalum za kuonyesha dirisha la programu, dirisha la kuchagua folda na shughuli zingine zinazofanana za msingi - anaweza kupiga simu tu kernel32.dll au user32.dll. kutoka kwa maktaba zilizo na kazi na taratibu za API, kazi anayohitaji, na atamfanyia kila kitu mwenyewe. Kuna kazi nyingi na taratibu kama hizo - karibu 600.

Katika chumba cha upasuaji Mfumo wa MS-DOS hakukuwa na kitu kama API - yule ambaye alichukua kuandika programu ya mfumo huu wa kufanya kazi alilazimika kufikiria na kutekeleza njia za kuonyesha picha kwenye skrini, kupokea data kutoka kwa mtumiaji, kusafiri kupitia mfumo wa faili, kuchora. picha, ikiwa uwezekano kama huo ulikuwa muhimu 2. Hii ilifanya mchakato wa kuunda programu zilizo na kiolesura cha kirafiki kuwa mchakato unaohitaji nguvu kazi nyingi; mara nyingi wakati na bidii iliyotumika kuunda kiolesura cha picha kinachokubalika cha programu kilizidi gharama za kutekeleza algorithm ya programu yenyewe, ambayo iliundwa. . Sio bure kwamba programu zinazoitwa "console" zilikuwa za kawaida sana, ambayo ni, programu ambazo zilifanya kazi tu kutoka kwa safu ya amri, bila interface - data iliingizwa kwenye safu ya amri sawa au kufanywa kutoka kwa faili iliyoainishwa ndani yake, na matokeo yalitolewa katika hali rahisi ya maandishi.

Pamoja na ujio wa chumba cha upasuaji Mifumo ya Windows Kazi ya kurudisha nyuma ya watengenezaji wa programu ili kukuza mwonekano wa programu na njia rahisi za kuingiza na kutoa habari iliwezeshwa sana - kazi za API zilikuwa tayari kutumika katika Windows 3.0. Sasa mpangaji wa programu, ikiwa, kwa mfano, alitaka kuunda kidirisha cha kuingiza maandishi au upau wa kusongesha, ilibidi tu aandike simu kwa kazi ya kuonyesha dirisha kama hilo na vigezo alivyohitaji, kama kazi nyingine yoyote ya Lugha ambayo aliandika programu yake, na sio kuanzisha idadi kubwa ya nambari kuunda programu ambayo huchota tena dirisha au baa kama hiyo (huku akijua kuwa wakati wa kuunda programu inayofuata ambayo pia hutumia vitu kama hivyo, italazimika kukuza. nambari kama hiyo tena au jaribu kutumia sehemu ya zamani, kuirekebisha kulingana na mahitaji ya programu hii mpya). Kwa hiyo, kuibuka kwa API kulifanya mafanikio ya mapinduzi katika teknolojia ya programu, kuruhusu uumbaji programu zinazohitajika na kiolesura kinachofaa kinachojulikana kwa haraka zaidi, bila kuwa na wasiwasi kuhusu maelezo ya kawaida kama vile vitu vya kiolesura cha kawaida cha kuingiza na kutoa taarifa.

KATIKA Lugha inayoonekana Basic for Applications (VBA) kazi na taratibu nyingi za API huitwa zenyewe wakati programu inatekelezwa na mkalimani, kwa hiyo hakuna haja kabisa ya kuzitumia ili kuonyesha madirisha ya kuingiza maandishi na kutoa, kuchora maumbo ya kijiometri kwenye skrini na vitendo vingine rahisi. - VBA huwaita inapohitajika , na programu kulingana nayo inahitaji tu kutumia vitendaji sambamba vya lugha hii. Hata hivyo, wakati mwingine kuna haja ya vitendo fulani, ambayo hakuna analogues katika kujengwa ndani Kazi za VBA, au wanafanya kazi bila busara au polepole sana. Kwa mfano, dirisha la uteuzi wa folda na picha ya mti wa saraka (Mchoro 5.1) au programu ya utafutaji wa faili (analog katika kazi za VBA - kitu cha "Application.FileSearch" - hufanya kazi polepole sana na idadi kubwa ya faili). Kwa hali kama hizi, VBA hutoa uwezo wa kupiga kazi za API.

Kwa bahati mbaya, utumiaji wa vitendaji vya API katika VBA haujaandikwa katika usaidizi, kwa hivyo ili kujifunza jinsi ya kuzitumia, lazima utafute vitabu au vyanzo vya mtandaoni kwenye programu ya ofisi, au kuchambua nambari za programu ambazo zina simu kwa kazi za API.

Katika idadi kubwa ya matukio, wakati wa kupanga kwa Ofisi, unaweza kufanya bila matumizi ya API, lakini wakati mwingine kupiga tu kazi ya API kunaweza kufikia matokeo yaliyotarajiwa. Wacha tuseme unahitaji kuhakikisha kuwa macros tofauti huitwa unapobofya tu kitufe kwenye paneli na kipanya. Zana za maneno na ukibonyeza kitufe hiki na Vifunguo vya Shift au Udhibiti. Hapa kuna kipande kidogo cha nambari inayofanya hivi:

Tangaza Kazi ya GetAsyncKeyState Lib "user32.dll" (ByVal kState As Long) Kama Nambari kamili

GetAsyncKeyState(vbKeyShift Au vbKeyControl)

Ikiwa GetAsyncKeyState(vbKeyShift) Basi

Piga macro1: Toka kwa Sub

ElseIf GetAsyncKeyState(vbKeyControl) Basi

Piga simu macro2: Toka kwa Sub

Mstari wa kwanza ni kama "kuhifadhi" kazi ya API kwa matumizi katika programu ya VBA. Inaweza kuonekana kuwa kazi ya GetAsyncKeyState inaitwa kutoka kwa maktaba (faili iliyo na programu zinazokusudiwa tu kutumiwa na programu zingine) user32.dll, na nambari ya ufunguo hupitishwa kwa kazi hii, na inarudisha nambari kamili (yaani 0, ikiwa ufunguo ulio na nambari inayolingana haujasisitizwa, na -32767 au 1 ikiwa imesisitizwa). Kazi au utaratibu wowote unaoitwa kutoka kwa maktaba zisizo za VBA lazima uhifadhiwe kwa kutumia amri ya Declare.

Kishazi cha vbKeyShift katika amri ni kibadala cha msimbo wa ufunguo wa Shift (thamani yake ni 16), na vbKeyControl, kama ilivyo rahisi kuelewa, ni mbadala wa msimbo wa ufunguo wa Kudhibiti. Muundo wa taarifa za "Ikiwa ... Kisha" inaonekana kuwa wazi 3, lakini ikiwa sivyo, angalia msaada wa VBA. Amri ya Simu kabla ya jina la jumla, kama unavyokumbuka, inamaanisha kuizindua.

Kuna tovuti za Kirusi kwenye mtandao zilizowekwa kwa API 4. Zitembelee ili upate maelezo zaidi kuhusu seti hii ya vipengele.