Esimerkkejä API-toiminnoista Internetin kanssa työskentelyä varten. Käyttöjärjestelmien API. Turvallisuuden varmistaminen ulkopuolelta

On aika puhua sellaisesta käsitteestä kuin API toimii Visual Basic -kielellä. Miksi nämä toiminnot ovat tärkeitä Visual Basicissa? Selvitetään se ensinnäkin, kun aloitat ohjelmoinnin Visual Basicissa, ymmärrät heti, että näiden toimintojen avulla voit kirjoittaa erittäin vakavia ohjelmia, ja toiseksi et yksinkertaisesti voi tehdä paljon ilman API-toimintoja, esimerkiksi melkein kaikkea, mikä liittyy Windows-käyttöjärjestelmä ( esimerkiksi: selvitä käyttäjänimi, kiintolevytila ​​jne.).

Mutta jotta voit alkaa toteuttaa näitä toimintoja käytännössä, sinun on tiedettävä, mitä ne ovat. Puhutaanpa siitä ensin.

Visual Basic API -toimintojen teoria

API on lyhenne sanoista Application Programming Interface ( sovellusohjelmointirajapinta). Toisin sanoen API on joukko toimintoja, joita käyttöjärjestelmä itse antaa ohjelmoijalle käyttää ohjelmissaan. API:n avulla ohjelmoijat voivat helposti toteuttaa ideansa käytännössä.

API-funktioita voidaan kutsua Visual Basicista suorittamaan tehtäviä, joihin standardi ei riitä ohjelmakoodi Visual Basic. Esimerkiksi, standardi tarkoittaa Visual Basic ei salli tietokoneen sammuttamista tai uudelleenkäynnistystä. Kaikki tämä voidaan kuitenkin tehdä helposti kutsumalla sopiva API-toiminto.

Lähes kaikki Windowsissa sijaitsevat toiminnot sijaitsevat DLL-tiedostojen sisällä ( Dynaaminen linkkikirjasto). Kaikki dll-tiedostot sijaitsevat järjestelmässä Windows-kansio. API-toimintoja on yli 1 000, jotka jakautuvat neljään pääluokkaan.

  • Työskentely sovellusten kanssa - sovellusten käynnistäminen ja sulkeminen, valikkokomentojen käsittely, ikkunoiden siirtäminen ja koon muuttaminen;
  • Grafiikka - kuvien luominen;
  • Järjestelmätiedot - nykyisen levyn tunniste, muistin koko, nykyinen käyttäjänimi jne.;
  • Työskentely rekisterin kanssa - Windows-rekisterin manipulointi.

API-toimintojen käyttö käytännössä

Siirrytään nyt näiden toimintojen käyttöön käytännössä. Visual Basicissa kutsutut API-funktiot on ensin ilmoitettava. Ilmoitus määrittää DLL:n ja funktion nimen sekä tiedot argumenttien lukumäärästä ja tyypistä.

DLL-proseduurit ilmoitetaan Declare-komennolla lomakemoduulin tai vakiomoduulin Yleiset ilmoitukset -osiossa:

Ilmoita funktion nimi Lib "kirjasto" [([ _ muuttuja [,ByVal,] muuttuja ]...])] Tyypinä

Vakiomoduuleista löytyvät DLL-proseduurit ovat oletuksena julkisia ja niitä voidaan kutsua mistä tahansa sovelluksen kohdasta. Lomakemoduulissa ilmoitetut menettelyt ovat yksityisiä ja niitä on edeltävä avainsana Yksityinen.

Lib-osio kertoo, mistä etsiä DLL-tiedosto sisältää toiminnon. Kun viitataan Windowsin ydinkirjastoihin (user32.dll, kernel32.dll, gdi.dll), laajennusta ei tarvitse sisällyttää.

Jos tiedostopolkua ei ole määritetty, hakemistojen selaus alkaa seuraavassa järjestyksessä

  1. Ohjelman EXE-tiedoston sisältävä hakemisto;
  2. Nykyinen hakemisto;
  3. Windowsin järjestelmähakemisto;
  4. Windowsin hakemisto;
  5. Polun ympäristömuuttuja.

Tässä on pieni luettelo tavallisista Windowsin DLL-tiedostoista:

  • advapi.dll - NT-suojaus, rekisteri- ja muut edistyneet palvelut;
  • comdlg.dll - vakiovalintaikkunat;
  • gdi.dll - grafiikkalaitteen käyttöliittymä;
  • kernel32.dll - muisti, levyt, prosessit, resurssit;
  • mpr.dll - verkot;
  • netapi32.dll - verkon API-kirjasto;
  • shell32.dll - Windowsin kuori, vedä ja pudota, kuvakkeen valinta;
  • user32.dll - käyttöliittymä - ikkunat, valikot, rivit, viestit;
  • version.dll - versionhallinta;
  • winmm.dll - multimedia, ääni, ohjaussauvat, ajastimet;
  • winspoll.dll - tulostushallinta.

Useimmat DLL-proseduurit on dokumentoitu C- ja C++-ohjelmointikielillä. Voit muuntaa API-funktion onnistuneesti muotoon Ilmoita joukkue On välttämätöntä ymmärtää argumenttien välittämisen mekanismi. Yleensä argumentit välitetään arvon mukaan. Tässä tapauksessa ByVal-avainsana sijoitetaan argumentin nimen eteen. Jos argumentti välitetään viittauksella, ByRef asetetaan.

Tässä on pienin luettelo Visual Basicissa käytetyistä funktioista:

  • BitBlt - kopioi kuvan yhdestä hDC:stä toiseen;
  • FindWindow - etsii ikkunan kahvan määritetyllä kuvatekstillä;
  • GetCursorPos - palauttaa hiiren kohdistimen nykyisen sijainnin (maailmanlaajuisesti);
  • GetDriveType - palauttaa aseman tyypin;
  • GetForegroundWindow - palauttaa aktiivisen ikkunan kahvan;
  • SetCursorPos - asettaa hiiren kursorin uuden sijainnin;
  • SetVolumeLabel - muuttaa levyn nimen;
  • SetWindowPos - asettaa ikkunan sijainnin tietyllä kahvalla (voit myös käyttää tätä toimintoa asettaaksesi ikkunan kaikkien muiden ykköseksi);
  • ShellExecute - käynnistää laajennukseen liittyvän sovelluksen, jolla on määritetty tiedosto(voi myös vain käynnistää määritetyn sovelluksen);
  • ShowCursor - piilottaa tai näyttää hiiren kohdistimen näytöllä.

Esimerkkejä rekisterin kanssa työskentelystä

Myös Visual Basicilla ja muilla kielillä ohjelmoitaessa ilmenee ongelmia, kun sitä tarvitsee käyttää Windowsin rekisteri, mutta API-toimintoja käyttämällä tämä on helppo tehdä, esimerkiksi:

Jos haluat lukea merkkijonoparametrin, käytä GetRegString-funktiota

Esimerkki:

Himmennystesti Merkkijonona testi = GetRegString(HKEY_LOCAL_MACHINE, _ "Software\Microsoft\DirectX", "Versio") Form1.Caption = testi

DWORD-parametrin lukeminen GetRegDWord

Esimerkki:

Himmeä testi As Long testi = GetRegDWord(HKEY_LOCAL_MACHINE, _ "Software\Microsoft\Internet Explorer\AboutURLs", "Home") Form1.Caption = testi

Jos haluat kirjoittaa merkkijonoparametrin, käytä SetRegStringiä

Esimerkki:

SetRegString HKEY_LOCAL_MACHINE, _ "Software\test", "MyProgram", "Options"

Jos avainta tai parametria ei ole luotu, se luodaan; jos avain tai parametri on jo olemassa, uudet arvot kirjoitetaan vanhojen päälle.

Voit kirjoittaa DWORD-tyypin parametrin käyttämällä SetRegDWordia

Esimerkki:

SetRegDWord HKEY_LOCAL_MACHINE, _ "Software\test", "MyProgram", "555"

Voit poistaa avaimen rekisteristä käyttämällä DeleteRegKey-toimintoa

Esimerkki:

DeleteRegKey HKEY_LOCAL_MACHINE, "Software", "test", True

Toinen parametri - Vanhemman avain
Kolmas parametri on True - jos poistamisen vahvistus vaaditaan tai False - jos vahvistusta ei vaadita.

Voit poistaa arvon rekisteristä käyttämällä DeleteRegValue -toimintoa

Esimerkki:

DeleteRegValue HKEY_LOCAL_MACHINE,_ "Software\Microsoft\Internet Explorer\AboutURLs", "mozilla", False

Itse asiassa ominaisuudet API toimii toiminnassa Windows-järjestelmä lähes rajattomasti. Lopetetaan tämän Visual Basic -ominaisuuden tarkastelu ja kirjoitetaan lopuksi pieni ohjelma API-funktioiden avulla.

Tämä ohjelma näyttää yksinkertaisesti viestin näytöllä, liitä seuraava koodi:

Yksityinen Ilmoita funktio BeginPath Lib "gdi32" (ByVal hdc As Long) Yksityinen Ilmoita funktio EndPath Lib "gdi32" (ByVal hdc As Long) Pitkäksi Yksityinen Ilmoita funktio PathToRegion Lib "gdi32" (ByVal hdc Long Private As Long) A Funktio SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long Yksityinen Sub Form_Load() Const TEXT = "Käytit API" Dim hRgn As Long Font.Name = "Times New Roman " Font.Bold = Todellinen fonttikoko = 60 Leveys = Tekstinleveys(TEKSTI) Korkeus = Tekstinkorkeus(TEKSTI) AloitusPath hdc Tulosta TEKSTI EndPath hdc hRgn = Polkualue(hdc) SetWindowRgn hWnd, hRgn, False Move (Screen.Width) / Leveys 2 , (Screen.Height - Height) / 2 End Sub

Tässä käytimme 4 funktiota (BeginPath, EndPath, PathToRegion, SetWindowRgn), jotka sijaitsevat kahdessa dll-kirjastossa (gdi32, user32).

Tässä kaikki tältä erää!

Terveisiä!
Tässä artikkelissa tarkastellaan mitä API on, missä, miten ja mihin sitä käytetään. Katsomme myös, kuinka API:ta voidaan käyttää verkkokehityksessäsi ja miten se voi yksinkertaistaa web-ohjelmoijan elämää.

Aloitetaan siis määritelmästä. API (Application Programming Interface) on ohjelmointirajapinta, käyttöliittymä sovellusten luomiseen. Ymmärrettävämmin sanottuna API on valmis koodi, joka helpottaa ohjelmoijan elämää. API luotiin niin, että ohjelmoija voisi todella helpottaa sovelluksen kirjoittamista käyttämällä valmiita koodia (esimerkiksi funktioita). Tunnettu JavaScriptillä kirjoitettu jQuery on myös eräänlainen API. Jos tarkastelemme tätä esimerkkiä erityisesti, jQuery tekee koodin kirjoittamisesta paljon helpompaa. Se, mitä voidaan tehdä tavallisilla JavaScript-työkaluilla 30 rivillä, kirjoitetaan 5-6 jQuerylla. Jos katsomme API:ita yleisesti, voimme löytää paljon palveluita, jotka tarjoavat kehitysratkaisuja. Tunnetuin nykyään on code.google.com-palvelu, joka tarjoaa noin viisikymmentä erilaista sovellusliittymää! Tämä sisältää käyttöliittymän Android-sovellusten luomiseen, erilaisia ​​sovellusliittymiä AJAX-työskentelyyn sekä erilaisia ​​sovellusrajapintoja, jotka voidaan helposti mukauttaa mieleiseksesi.

Loppujen lopuksi onko järkevää kirjoittaa koodia itse? Miksi työskennellä sen parissa, mikä on jo luotu? Onko järkevää kieltäytyä ilmaisista ratkaisuista (ja itse asiassa ilmaisesta avusta) verkkokehityksessä? Jos vastasit "EI" kaikkiin näihin kysymyksiin, luule, että ymmärrät API:n olemuksen.

Mutta haluan myös tehdä varauksen. Aloittelevien kehittäjien ÄLÄ käytä puolivalmistettuja ratkaisuja, koska he eivät selviä todellisesta ongelmasta tulevaisuudessa. Siksi, jos olet aloittelija web-ohjelmoija, älä käytä puolivalmiita tuotteita! Opi ajattelemaan omalla päällään, rakentamaan erilaisia ​​algoritmeja ymmärtääksesi ohjelmoinnin olemuksen. Sanon myös jo kaikille puhuttaessa, että API:t eivät ole valmiita ratkaisuja, ne ovat ympäristö, käyttöliittymä omien projektien luomiseen. Ethän syö pakastekotletteja kaupasta, ethän? Paistat ne ensin, eikö niin? Tämä analogia kuvaa API:n olemuksen erittäin selvästi.

Yleisesti kerroin, mikä API on, missä ja miten sitä käytetään, ja mikä tärkeintä, miksi. Toivotan sinulle miellyttävää verkko-ohjelmoinnin oppimista ja sen yhä suurempien syvyyksien ymmärtämistä!

Tunnisteet: api

Tätä artikkelia ei kommentoida, koska sen kirjoittaja ei ole vielä yhteisön täysivaltainen jäsen. Voit ottaa yhteyttä kirjoittajaan vasta saatuaan

Ennemmin tai myöhemmin jokainen ohjelmoija kohtaa sellaisen käsitteen kuin API. Kuitenkin, kun tällainen kokous tapahtuu, kaikki eivät tiedä, mikä se on, miksi sitä tarvitaan ja miten sitä käytetään. Ja tässä artikkelissa aion täyttää tämän aukon joidenkin teistä tiedoissa ja annan myös esimerkin omasta käytännöstäni.

API (sovellusohjelmointirajapinta) - Tämä sovellusohjelmointirajapinta. Enemmän asiaan yksinkertaisella kielellä, niin tämä on setti erilaisia ​​toimintoja, vakiot, luokat, kyselymuodot, joita voidaan käyttää muissa ohjelmissa.

Sitä voidaan pitää niin API- tämä on tietty esine, jonka toteutusta emme tiedä, mutta voimme käyttää sitä. Esimerkiksi tietokone on objekti, jonka toteutuksen vain harvat tietävät, mutta melkein kaikki voivat käyttää sitä tiettyjen toimintojen suorittamiseen: videoiden katseluun, Internetin surffaamiseen, tekstin tulostamiseen jne. Harvat ihmiset tietävät, miten se kaikki toimii, mutta melkein kaikki voivat tehdä sen.

Esimerkki API On Windows API, OpenGL API, Direct3D API ja niin edelleen.

Esimerkiksi vähän aikaa sitten törmäsin myös suoraan API. Rekisteröidyin postituslistapalveluun" SmartResponder.ru" ja aloitti uutiskirjeen, jota ihmiset alkoivat tilata. Tehtävä oli seuraava: 24 tunnin sisällä tilaamisesta henkilö voi ostaa maksullisen videokurssini alennuksella. Koska kaikki tilaajatiedot on tallennettu palvelimelle " SmartResponder.ru", sitten normaali pääsy (esimerkiksi kautta DB) Minulla ei ollut pääsyä näihin tietoihin, mutta se oli tarpeen ottaa ne käyttöön. Onneksi" SmartResponder.ru"Oma omasi API, jota käytin.

Löysin niistä API pyyntömuodossa saadaksesi tilauspäivämäärän tuloksena. Kauempana kiemura Lähetin vastaavan pyynnön ja sain vaaditun tilauspäivän tietylle sähköpostiosoitteet. Seuraavaksi on normaali käsittely ja tuloksen tulostus.

Työskentely API:iden kanssa voi olla sekä palkitsevaa että turhauttavaa. Toisaalta vuorovaikutuksessa muiden sovellusten kanssa voit lisätä huomattavasti sovelluksesi yleisön tavoittavuutta ja "vau"-vaikutusta. Toisaalta tämä edellyttää lukuisten asiakirjojen lukemista, todennusstrategioiden tutkimista ja epätietoisten (tai jopa puuttuvien) virheilmoitusten jäsentämistä.

Ensinnäkin, jos et vieläkään täysin ymmärrä, mitä API (Application Programming Interface) on, lue Skillcrushin selitys ja tämän artikkelin ensimmäinen osa.

"API" on uskomattoman laaja käsite - aina kun sovelluksesi "puhuu" toisen sovelluksen kanssa, se tekee sen jonkinlaisen API:n kautta. Oman sovelluksesi komponentit, kuten Railin eri osat, keskustelevat myös keskenään API:iden kautta. Ne ovat enemmän tai vähemmän itsenäisiä alisovelluksia, jotka tarjoavat tiedot, joita kukin tarvitsee suorittaakseen omia erityistehtäviään. Sovellusmaailmassa kaikki on API!

Kun rakennat sovelluksia, joissa on dynaamisemmat käyttöliittymätoiminnot (sekä yksisivuisia Javascript-sovelluksia että yksinkertaisia ​​sovelluksia yksittäisillä AJAX-kutsuilla), ne kommunikoivat Rails-taustajärjestelmän kanssa oman API-liittymäsi kautta, joka on oikeastaan ​​vain ylimääräinen rivi tai kaksi koodia. , joka kertoo ohjaimillesi, kuinka JSON- tai XML-muotoa käytetään HTML:n sijaan.

Tässä opetusohjelmassa opit luomaan oman sovellusliittymän. Seuraavilla oppitunneilla käsittelemme vuorovaikutusta muiden sovellusten API:iden kanssa. Oppituntien pitäisi olla hyvä ponnahduslauta tämän aiheen oppimiseen, mutta ne eivät todennäköisesti kata kaikkia tapauksia. Suuri osa sovellusliittymien kanssa työskentelystä on osaaminen lukea niiden dokumentaatiota ja selvittää, mitä he haluavat sinulta.

Huomioitavaa

Tarkista kysymykset ja katso, tiedätkö vastaukset. Testaa itsesi uudelleen tehtävän suorittamisen jälkeen.

  • Miten Rails ymmärtää, minkä tyyppistä tiedostoa odotat vastauksena, kun lähetät HTTP-pyynnön.
  • Mikä on #respond_to-menetelmän tarkoitus?
  • Kuinka palautat User-objektin määrittäessäsi attribuutteja, joita et halua sisällyttää kyseiseen objektiin (eli et voi palauttaa vain User.first)?
  • Nimeä 2 vaihetta #to_json-menetelmän kulissien takana.
  • Kuinka käskee ohjaimen toimintoa näyttämään vain virheilmoituksen?
  • Kuinka luoda oma virheilmoitus?
  • Miksi et voi käyttää istuntopohjaisia ​​ohjaimen todennusmenetelmiä, jos haluat sallia ohjelmalliset yhteydet API:llesi?
  • Mikä on "palvelukeskeinen arkkitehtuuri"?

API-perustiedot

Rails-sovelluksesi on itse asiassa jo API, vaikka et ehkä ajattele sitä API:na. Käyttäjien käynnistämä verkkoselain on myös ohjelma, joten se tekee itse asiassa API-pyynnön Rails-sovelluksellesi, kun käyttäjä avaa uusi sivu. Meillä on tapana ajatella näin, koska HTML-mallien renderöinti on niin yleinen tehtävä, että me yksinkertaisesti leikkaamme tämän toiminnon palvelinohjelmiimme vakiovastaustyyppinä ja pidämme kaikkea muuta epätavallisena.

Kuitenkin usein haluat tehdä pyynnön, joka ei vaadi sinua käymään läpi kaikkia selaimen käytön aiheuttamia päänsärkyjä. Et ehkä välitä sivun rakenteesta (HTML), mutta vastineeksi haluat puhtaita tietoja. Oletetaan, että haluat saada luettelon kaikista käyttäjistä. Voit pyytää jotain, kuten http://yourapplication.com/users , joka varmasti käynnistää #index-toiminnon ja luo luettelon kaikista sovelluksen käyttäjistä.

Mutta miksi vaivautua kaikella näillä lisätiedoilla, jos haluat vain luettelon käyttäjistä? Eniten yksinkertainen vaihtoehto lähettää pyynnön samaan URL-osoitteeseen ja määrittää vastineeksi JSON- tai XML-vastauksen odotuksen. Jos määrität Rails-ohjaimen oikein, saat takaisin yksinkertaisen JSON-taulukkoobjektin, joka sisältää kaikki käyttäjät. Ihana!

Sama periaate pätee, kun kommunikoit ulkoisen API:n kanssa. Oletetaan, että haluat saada käyttäjän viimeisimmät twiitit Twitteristä. Sinun tarvitsee vain kertoa Rails-sovelluksellesi, kuinka se toimii Twitterin API:n kanssa (eli todentaa itsensä), lähettää pyynnön ja käsitellä palautettavat "tweetit".

API:n luominen

Haluat ehkä tehdä Rails-sovelluksestasi puhtaan taustasovellusliittymän käyttöliittymän verkkosivuille, tai haluat ehkä vain oppia lähettämään JSON-tiedostoja käyttöliittymän sitä pyytäessä. Tässä osiossa ei käsitellä täysimittaisten RESTful API:iden luomista todennustoiminnoilla. Tämä on sujuva johdatus sovelluksesi käsittelyyn API:na.

Perusasiat

Jos haluat Rails-sovelluksesi palauttavan JSON-muodon HTML:n sijaan, sinun on kehotettava ohjainta tekemään niin. Hienoa on, että sama ohjaimen toiminta voi palata Erilaisia ​​tyyppejä riippuen siitä, tekeekö käyttäjä säännöllisen pyynnön selaimesta vai käyttääkö sovellusliittymää komentorivin kautta. Tämä määrittää, minkä tyyppinen pyyntö tehtiin pyydetyn tiedoston laajennuksen perusteella, kuten example.xml tai example.json.

Voit tarkistaa, mitä Rails ajattelee odottamastasi tiedostotyypistä tarkistamalla palvelimen lokista:

Aloitettu GET "/posts/new" kohteelle 127.0.0.1 klo 2013-12-02 15:21:08 -0800 PostsControllerin käsittely#uusi HTML-muodossa

Ensimmäinen rivi kertoo, mitä URL-osoitetta pyydettiin, ja toinen kertoo, minne se lähetettiin ja kuinka Rails käsittelee sen. Jos käyttäisit .json-laajennusta, se näyttäisi tältä:

Aloitettu GET "/posts.json" 127.0.0.1 2013-12-04 12:02:01 -0800 PostsController#index käsittelee JSON-muodossa

Jos sinulla on testisovellus käynnissä, yritä pyytää eri URL-osoitteita. Jos ohjaimesi ei voi käsitellä niitä, saatat saada virheilmoituksen, mutta sinun pitäisi silti nähdä, mitä Rails ymmärtää pyyntösi.

Renderöidään JSON tai XML

Kun päätät vastata pyyntöihin JSON- tai XML-muodossa, sinun on kehotettava ohjainta renderöimään JSON tai XML HTML:n sijaan. Yksi tapa tehdä tämä on käyttää #respond_to-menetelmää:

Class UsersController< 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

Tässä tapauksessa #respond_to välittää lohkolle muotoobjektin, johon voit liittää vastaavan renderöintikutsun. Jos et tee mitään, html hahmonnetaan käyttämällä standardi Rails-mallia (tässä esimerkissä app/views/index.html.erb).

#render-toiminto on tarpeeksi älykäs ymmärtääkseen kuinka hahmontaa useita muotoja. Kun annat sille avaimen:json , se kutsuu #to_json-arvoa in tässä esimerkissä@käyttäjille. Tämä muuntaa Ruby-objektisi JSON-merkkijonoiksi, jotka välitetään pyytävälle sovellukselle.

Näin saat API:si. Tietenkin API:n luominen voi olla hieman monimutkaisempaa, jos haluat tehdä hienoja asioita, mutta kaikki pysyy perusasioissa.

Palautettujen attribuuttien määrittäminen

Oletetaan, että haluat varmistaa, että et palauta käyttäjän sähköpostiosoitetta User-objektin mukana. Tässä tapauksessa haluat muuttaa palautettavia määritteitä ja muuttaa #to_json-menetelmän toimintaa.

Aiemmin olisit yksinkertaisesti ohittanut #to_json-menetelmän versiollasi, mutta nyt sinun ei tarvitse tehdä sitä - itse asiassa ohitat #as_json-menetelmän. #as_json-menetelmää käytetään #to_json-menetelmässä, joten sen muokkaus muuttaa implisiittisesti #to_json -menetelmän tulosta, mutta melko spesifisellä tavalla.

#to_json tekee 2 asiaa: se suorittaa #as_json ja saa tiivisteen attribuuteista, jotka renderöidään JSONiin. Sitten se hahmonnetaan JSON:ksi käyttämällä ActiveSupport::json.encodea. Joten muokkaamalla #as_json olet tarkempi #to_json-menetelmän osassa, jota haluat todella muuttaa.

Meidän tapauksessamme teemme tämän muokkaamalla mallissamme #as_json palauttamaan vain tarvitsemamme attribuutit:

# app/models/user.rb-luokan käyttäjä< ActiveRecord::Base # Вариант 1: Полное переопределение метода #as_json def as_json(options={}) { :name =>self.name ) # ÄLÄ sisällytä sähköpostikentän loppu # Vaihtoehto 2: Käytä vakiomenetelmää #as_json def as_json(options=()) super(vain: [:nimi]) end end

Sitten ohjaimemme tarvitsee vain renderöidä JSON tavalliseen tapaan (alla olevassa esimerkissä JSON palautetaan aina riippumatta siitä, lähetettiinkö HTML-pyyntö vai ei):

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

Huomaa, että sinun ei tarvitse kutsua #to_json itse, kun käytät #render-toimintoa - se tekee tämän puolestasi.

Joskus Heroku saattaa vaatia lisätoimenpiteitä virhesivujesi näyttämiseksi oikein. Katso. Sinun on ehkä ensin poistettava staattiset sivut sovelluksesta/julkisesta hakemistosta.

Turvallisuuden varmistaminen ulkopuolelta

Oletetaan, että haluat sallia API:n käytön vain, jos käyttäjä on kirjautunut sisään. Ohjaimessa oleva todennus tekee jo tämän työn – varmista vain, että sinulla on oikea #before_action-joukko (esim. before_action:require_login). Saatat tarvita toimintoja, joissa sekä sisäänkirjautuneet että kirjautumattomat käyttäjät voivat tarkastella sivua, mutta kummankin pitäisi nähdä eri tiedot. Et halua, että todentamattomat käyttäjät voivat soittaa API-kutsuja saadakseen arkaluontoisia tietoja. Samoin et halua sallia luvattomien käyttäjien käydä tietyillä HTML-sivuilla.

Jos haluat käsitellä pyyntöjä sovelluksesta, joka ei ole selain (esim komentorivi), et voi luottaa selaimen evästeisiin todentamiseen. Tästä syystä useimmat API:t käyttävät alkuperäisiä tunnuksia osana todennusprosessia. Puhumme hieman enemmän rahakkeista seuraavalla oppitunnilla.

Seuraavat vaiheet

Sinulla on nyt taidot käyttää Rails-sovellusta HTML:n lisäksi myös minkä tahansa muun muodon hahmontamiseen. Jos haluat mennä pidemmälle ja antaa muiden kehittäjien rakentaa asioita alustasi avulla (esimerkiksi jotta he voivat tehdä ohjelmallisia pyyntöjä käyttäjänä todennuksen sijaan), sinun on tehtävä API-järjestelmästäsi paljon kestävämpi. Emme kata kaikkea tässä, mutta tarkista seuraavat:

  • Artikkelissa Awesome Rails API:iden rakentaminen kuvailee monia parhaita tapoja siirtyä lelusovelluksesta teollisiin API-standardeihin.

Palvelukeskeinen arkkitehtuuri

On aika ottaa käyttöön arkkitehtoninen lähestymistapa nimeltä Service-Oriented Architecture (SOA). Perusideana on, että hakemuksesi koostuu useista palveluista, kuten maksujärjestelmästä, käyttäjärekisteröinnistä, suositusmoduulista jne. Sen sijaan, että rakentaisit sen kaiken yhden pääsovelluksen sisään, jaat alijärjestelmät täysin itsenäisiksi osiin, jotka kommunikoivat keskenään sisäisten API:iden avulla.

Tämä on hyvä monesta syystä. Koska jokainen sovelluksesi osa ei välitä muiden osien toiminnasta ja osaa pyytää tietoja vain API:nsa kautta, voit tehdä huomattavia muutoksia palvelukoodiin ja muu sovellus toimii kuten ennenkin. Voit korvata yhden palvelun kokonaan toisella, ja niin kauan kuin se kommunikoi samoilla API-menetelmillä, se sujuu erittäin sujuvasti. Voit käyttää ulkoisia API:ita osana sovellustasi (esim. maksujärjestelmiä) oman kirjoittamisen sijaan. Voit luoda PHP-sovelluksen, joka kommunikoi Python-sovelluksen kanssa, joka kommunikoi Rails-sovelluksen kanssa, ja kaikki toimii, koska ne kommunikoivat keskenään API:n avulla.

Yleensä on hyvä idea yrittää tehdä jokaisesta sovelluksesi osasta mahdollisimman riippumaton. SOA-konsepti pakottaa sinut miettimään, mitä menetelmiä haluat paljastaa sovelluksesi muille osille, mikä myös parantaa koodiasi. Lisäksi olettaen, että sovelluksesi jokainen pääkomponentti on itsenäinen, pystyt myös eristämään ongelmat paljon helpommin ja käsittelemään virheitä mielekkäämmällä tavalla.

Palvelukeskeisen arkkitehtuurin käyttäminen koko sovelluksessa on kuin jättimäisen, monimutkaisen Ruby-skriptin hajottamista siisteiksi luokiksi ja menetelmiksi, vain suuremmassa mittakaavassa.

Yksi tunnetuimmista palvelukeskeiseen arkkitehtuuriin siirtymisen tapauksista on Amazon.com. Eräänä päivänä vuonna 2002 Jeff Bezos sanoi suoraan, että kaikkien työryhmien on siirryttävä SOA:han tai heidät erotetaan. Pahamaineinen blogipostaus Googlen työntekijä, joka oli tarkoitettu sisäisiin tarkoituksiin, mutta vahingossa julkistettu, puhui Amazonin voimasta SOA:n avulla. Se on hienoa luettavaa, joten muista tarkistaa se, mutta Bezosin kirjeen pääkohdat on tiivistetty seuraavissa lainauksissa viestistä:

1) Kaikki tiimit tarjoavat nyt tietonsa ja toiminnallisuutensa palvelurajapintojen kautta.

2) Joukkueiden tulee kommunikoida keskenään näiden rajapintojen kautta.

3) Muut prosessien välisen viestinnän muodot ovat kiellettyjä: ei suoria linkkejä, ei suoraa toisen komennon tietojen lukemista, ei malleja jaettu muisti, ei takaovia tai muuta vastaavaa. Ainoa sallittu vuorovaikutustapa on päästä palvelurajapintaan verkon kautta.

4) Sillä ei ole väliä mitä tekniikkaa he käyttävät. HTTP, Corba, Pubsub, omat protokollat ​​- ei eroa. Bezos ei välitä.

5) Kaikki palvelurajapinnat poikkeuksetta tulee suunnitella alun perin siten, että niitä voidaan ohjata ulkoisesti. Eli tiimin on suunniteltava ja suunniteltava voidakseen tarjota käyttöliittymän yrityksen ulkopuolisille kehittäjille. Ei poikkeuksia.

6) Jokainen, joka ei huomioi näitä vaatimuksia, erotetaan.

SOA on vakavaa toimintaa. Toki sitä käytettäessä tulee vastaan ​​monia ongelmia - katso tämä Amazonin "oppitunteja" koskeva viesti - mutta sillä on uskomattoman paljon etuja.

Et luultavasti murehdi liikaa SOA:sta, kun rakennat itsellesi lelusovelluksia, mutta se on varmasti ongelma, joka tulee esille, kun aloitat työskentelyn IT-yrityksessä, joten siihen tutustuminen on hyvä käytäntö.

Sinun tavoitteesi

  1. Lue Rails Controllers Guide -oppaan osio 7 saadaksesi lisätietoja JSON- ja XML-renderöimisestä.
  2. Niitä ei vaadita katselemaan (koska ne menevät hieman pidemmälle kuin olemme tällä hetkellä valmistautuneet), mutta jos olet kiinnostunut, katso Railscastit oppitunnin alaosan Lisäresurssit-osiossa saadaksesi lisätietoja API:n edut.

Johtopäätös

Työskentelemme tiiviimmin sovelluksesi kanssa API:na Javascript-kurssin aikana. Tällä kurssilla luot useita täyden pinon sovelluksia, jotka käyttävät AJAX-kutsuja paremman käyttökokemuksen saavuttamiseksi, mikä tarkoittaa käytännössä XML- tai JSON-tietojen hahmontamista täyden HTML-sivun sijaan. Tämän jälkeen luot useita yksisivuisia Javascript-sovelluksia, jotka luottavat Rails-sovelluksesi tarjoamaan API:hen kaikkien tarvittavien tietojen hakemiseksi tietokannasta, mutta muuten toimivat asiakaspuolella (selaimessa).

Paras tapa ymmärtää API on luoda ja olla vuorovaikutuksessa sen kanssa, mihin keskitymme projekteissamme.

, funktiot, rakenteet tai vakiot), joista yksi tietokoneohjelma voi olla vuorovaikutuksessa toisen ohjelman kanssa. Sisältyy tyypillisesti joidenkin Internet-protokollan (esimerkiksi RFC), ohjelmistokehyksen (kehyksen) tai käyttöjärjestelmän toimintokutsustandardin kuvaukseen. Usein toteutetaan erillisellä ohjelmistokirjastolla tai käyttöjärjestelmäpalvelulla. Ohjelmoijat käyttävät sitä kirjoittaessaan kaikenlaisia ​​sovelluksia.

API sovellusintegraatiokeinona

API määrittelee ohjelman (moduulin, kirjaston) tarjoamat toiminnot, kun taas API mahdollistaa abstraktin siitä, miten tämä toiminto on toteutettu.

Jos ohjelmaa (moduulia, kirjastoa) pidetään mustana laatikkona, API on joukko "kahvoja", jotka ovat tämän laatikon käyttäjän käytettävissä ja joita hän voi pyörittää ja vetää.

Ohjelmistokomponentit ovat vuorovaikutuksessa toistensa kanssa API:iden kautta. Tällöin komponentit muodostavat yleensä hierarkian - korkean tason komponentit käyttävät matalan tason komponenttien API:ta ja ne puolestaan ​​vielä alemman tason komponenttien API:ta.

Tiedonsiirtoprotokollat ​​Internetissä on rakennettu tälle periaatteelle. Standardiprotokollapino (OSI-verkkomalli) sisältää 7 kerrosta (fyysisestä bitinsiirtokerroksesta sovellusprotokollakerrokseen, kuten HTTP- ja IMAP-protokollat). Jokainen kerros käyttää edellisen ("alemman") tiedonsiirtokerroksen toiminnallisuutta ja tarjoaa vuorostaan ​​tarvittavan toiminnallisuuden seuraavalle ("korkeammalle") tasolle.

On tärkeää huomata, että protokollan käsite on merkitykseltään lähellä API-käsitettä. Molemmat ovat toiminnallisuuden abstraktioita, vain ensimmäisessä tapauksessa puhumme tiedonsiirrosta ja toisessa sovellusten vuorovaikutuksesta.

Funktio- ja luokkakirjastosovellusliittymä sisältää kuvauksen allekirjoituksia Ja funktioiden semantiikka.

Toiminnon allekirjoitus

Joskus ne erottavat kutsun allekirjoitus Ja täytäntöönpanon allekirjoitus toimintoja. Kutsutunniste kootaan yleensä funktiokutsun syntaktisesta rakenteesta ottaen huomioon annetun funktion laajuuden allekirjoitus, funktion nimi, kutsun varsinaisten argumenttityyppien järjestys sekä funktion tyyppi. tulos. Toteutusallekirjoitus sisältää yleensä joitain elementtejä funktion määrittelyn syntaktisesta rakenteesta: funktion laajuuden määritteen, sen nimen ja muodollisten argumenttityyppien sarjan.

Esimerkiksi C++-ohjelmointikielessä kääntäjä tunnistaa yksinkertaisen funktion yksilöllisesti sen nimen ja argumenttien tyyppijonon perusteella, joka muodostaa funktion allekirjoituksen tällä kielellä. Jos funktio on tietyn luokan metodi, luokan nimi sisällytetään myös allekirjoitukseen.

Toimialalla ohjelmisto Yhteiset standardirajapinnat vakiotoiminnallisuudelle ovat tärkeitä, koska ne varmistavat, että kaikki yhteistä APIa käyttävät ohjelmat toimivat yhtä hyvin tai ainakin tyypillisesti tutulla tavalla. API:n tapauksessa graafiset käyttöliittymät Tämä tarkoittaa, että ohjelmilla on samanlainen käyttöliittymä, mikä helpottaa uusien ohjelmistotuotteiden oppimista.

Toisaalta eroja API:t eri käyttöjärjestelmät vaikeuttaa merkittävästi sovellusten siirtoa alustojen välillä. Olla olemassa erilaisia ​​menetelmiä kiertää tämä monimutkaisuus - "välitason" API:iden kirjoittaminen (graafisten liitäntöjen wxWidgets, GTK jne.), kirjastojen kirjoittaminen, jotka yhdistävät yhden käyttöjärjestelmän järjestelmäkutsut toisen käyttöjärjestelmän järjestelmäkutsuihin (ajoajat, kuten Wine, cygwin jne.), koodausstandardien käyttöönotto ohjelmointikielissä (esim. tavallinen kirjasto C-kieli), tulkittujen kielten kirjoittaminen eri alustoilla (python, perl, php, tcl, Java jne.).

On myös huomattava, että ohjelmoijalla on usein käytössään useita erilaisia ​​API:ita saman tuloksen saavuttamiseksi. Lisäksi jokainen API toteutetaan yleensä API:lla ohjelmistokomponentit matalampi abstraktiotaso.

Esimerkiksi: nähdäksesi rivin "Hei, maailma!" selaimessa. ", sinun tarvitsee vain luoda HTML-dokumentti, jolla on minimaalinen otsikko ja yksinkertainen runko, joka sisältää tämän rivin. Kun selain avaa tämän dokumentin, selainohjelma välittää tiedostonimen (tai jo avatun tiedostokuvaajan) HTML-dokumentteja käsittelevälle kirjastolle, joka puolestaan API-apu Käyttöjärjestelmä lukee tämän tiedoston ja ymmärtää sen rakenteen ja kutsuu sitten peräkkäin vakiograafisten primitiivien kirjaston API:n kautta toimintoja, kuten "tyhjennä ikkuna", "kirjoita "Hei, maailma!" valitulla fontilla. Näitä toimintoja suorittaessaan grafiikkaprimitiivikirjasto ottaa yhteyttä ikkunan käyttöliittymäkirjastoon asianmukaisilla pyynnöillä, ja tämä kirjasto soittaa käyttöjärjestelmän API:lle kirjoittaakseen tietoja näytönohjaimen puskuriin.

Lisäksi lähes jokaisella tasolla on itse asiassa useita mahdollisia vaihtoehtoisia sovellusliittymiä. Esimerkiksi: voisimme kirjoittaa alkuperäinen dokumentti ei HTML:ssä, vaan LaTeX:ssä, näyttöön voidaan käyttää mitä tahansa selainta. Sitä paitsi, erilaisia ​​selaimia, käyttää erilaisia ​​HTML-kirjastoja, ja lisäksi kaikki tämä voidaan kääntää käyttämällä erilaisia ​​primitiivisiä kirjastoja ja eri käyttöjärjestelmissä.

Nykyisten monitasoisten API-järjestelmien tärkeimmät haasteet ovat siksi:

  • Vaikeus siirtää ohjelmakoodia API-järjestelmästä toiseen (esimerkiksi käyttöjärjestelmää vaihdettaessa);
  • Toimivuuden menetys siirryttäessä alemmalta tasolta korkeammalle. Karkeasti sanottuna jokainen API "kerros" on luotu helpottamaan joidenkin vakiotoimintojen suorittamista. Mutta samaan aikaan joidenkin muiden alemman tason API:n tarjoamien toimintojen suorittaminen tulee todella vaikeaksi tai muuttuu täysin mahdottomaksi.

Tunnetuimmat API:t

Käyttöjärjestelmät