Programim dhe zhvillim, javascript, python, php, html

Modeli i nënburimit RESTful API

Në hartimin e një API RESTful, thirrja e mëposhtme na jep informacion bazë për përdoruesin 123 (emri, mbiemri, etj.):

/api/users/123

Ne kemi shumë informacione për përdoruesit, kështu që bëjmë thirrje shtesë për të marrë nënburime në një përdorues si karroca e tyre:

/api/users/123/cart

Për një faqe administratori, ne dëshirojmë të shohim të gjithë informacionin e shportës për të gjithë përdoruesit. Një tabelë e madhe që liston çdo përdorues dhe disa detaje rreth karrocës së tyre. Natyrisht ne nuk duam të bëjmë një thirrje të veçantë API për çdo përdorues (ton kërkesa). Si do të bëhej kjo duke përdorur modelet RESTful API?

/api/carts/users ju erdhi në mendje, por atëherë në teori do të keni 2 mënyra për të marrë karrocën e një përdoruesi specifik duke shkuar /api/carts/users/123.


  • A mund të përcaktoni dy apis, një për përdoruesit si /api/users/{userId} dhe një tjetër për karrocat si/api/carts/{cartId}? 18.07.2015
  • Një objekt i karrocës përmban një atribut userId. Për faqen e administratorit, mund të përdorni diçka si '/api/carts?page=1' për të marrë karrocat e para X. Më pas përdorni userId (ekstrakt nga objektet e karrocave) për të dërguar një kërkesë tjetër si 'api/users?id = id1, id2, id3...' për të marrë informacionin e përdoruesit. 18.07.2015
  • Karroca është pak mashtruese. Nuk është aq një entitet në rastin tim. Është më shumë një përmbledhje e statistikave dhe analitikave në lidhje me sjelljen e blerjeve të përdoruesit. Pra, nuk ka vërtet një ID, por është vetëm një grup statistikash të llogaritura dhe informacione përmbledhëse të krijuara në një metodë shërbimi të API. Telefonoj /api/users/123/cart për të marrë statistikat e një përdoruesi për blerjet e tyre. Mund të marr një karrocë (statistikat/informacionet përmbledhëse) për një biznes gjithashtu duke telefonuar /api/org/111/cart. Pra, nëse dua një listë karrocash (ose statistika) për të gjithë përdoruesit, po pyes veten nëse /api/carts/users është mënyra e duhur. Duket disi e gabuar, por jo e sigurt. 18.07.2015

Përgjigjet:


1

Kjo zakonisht zgjidhet duke shtuar një aftësi deref në serverin tuaj REST. Duke supozuar se përgjigja nga përdoruesi juaj duket si:

{
  ...
  cartId: "12345",
  ...
}

mund të shtoni një çreferencë të thjeshtë duke kaluar në vargun e pyetjes "&deref=cart" (ose sido që të vendosni sintaksën tuaj.)

Kjo ende lë problemin e bërjes së një kërkese për përdorues. Unë do të parashtroja se ka dy mënyra për ta bërë këtë në përgjithësi. E para do të ishte me një lloj burimi multiget (shih [1] për një shembull). Problemi me këtë qasje është që ju duhet t'i dini të gjitha ID-të dhe të trajtoni vetë pagimin. E dyta (që unë besoj se është më e mirë) është të zbatoni një pikë fundore të indeksit për burimin tuaj të përdoruesit. Indeksimi ju lejon të kërkoni një burim (përgjithësisht nëpërmjet një vargu pyetësor si firstName=X ose çfarëdo tjetër që dëshironi të renditni.) Më pas duhet të zbatoni paging bazë në mënyrë që të mos kaloni sasi masive të të dhënave. Ka mijëra shembuj të faqes, por më e thjeshta do të ishte të specifikoni një numër (count=20) një shenjë fillimi (pasi=X) dhe një renditje renditjeje (sort=-createdAt).

Këto zbatime ju lejojnë të kërkoni më pas të gjithë përdoruesit dhe karrocat e tyre duke përsëritur në pikën përfundimtare të indeksit. Ju mund ta gjeni këtë të dobishme si një pikënisje për faqet [2].

[1] - Si të ndërtoni një API REST që merr një sërë ID-sh për burimet

[2] - Faqizimi në një aplikacion ueb REST

17.07.2015
  • Karroca nuk është aq një entitet në rastin tim. Është më shumë një përmbledhje e statistikave dhe analitikave në lidhje me sjelljen e blerjeve të përdoruesit. Pra, nuk ka vërtet një ID, por është vetëm një grup statistikash të llogaritura dhe informacione përmbledhëse të krijuara në një metodë shërbimi të API. Jam dakord me ju në lidhje me përdorimin e parametrave të indeksimit/kërkesës për të bërë faqet. Pra, po sugjeroni të shkoni me një rrugë URL si /api/carts/users?count=20&first=0? 18.07.2015
  • @Jeremy Është e vështirë të thuhet. Subjektet që llogariten nëpërmjet një pike fundore si kjo i bëjnë gjërat pak më të vështira për t'u bërë. Nëse mendoni se çfarë po bëni në mënyrë logjike, po merrni një mori përdoruesish dhe informacionin e karrocave të tyre. Sugjerimi juaj po merr karrocat dhe mund të indeksojë përdoruesit në ato karroca. Tingëllon konfuze. Unë mendoj se përdoruesi është objekti këtu dhe edhe nëse karroca llogaritet, trajtimi i saj si një fushë në objekt (p.sh. e aksesueshme nëpërmjet parametrave të pyetjes) ia vlen të merret parasysh për qartësi. 20.07.2015

  • 2

    Për disa arsye isha nën supozimin se të kesh 2 URI në të njëjtin burim ishte një gjë e keqe. Në situatën time /api/users/123/cart dhe /api/carts/users/123 do të kthenin të njëjtat të dhëna. Nëpërmjet më shumë kërkimeve kam mësuar nga burime të panumërta se është e pranueshme që të ketë URI të shumta për të njëjtin burim nëse ka kuptim për përdoruesin përfundimtar.

    Në rastin tim, unë ndoshta nuk do të ekspozoj /api/carts/users/123, por po planifikoj të përdor /api/carts/users me disa parametra pyetjesh për të kthyer një nëngrup karrocash në sistem. Në mënyrë të ngjashme, unë do të kem /api/carts/orgs për të kërkuar karrocat e org.

    Një sajt vërtet i mirë që gjeta me shembuj dhe shpjegime të qarta ishte Tutoriali REST API. Shpresoj që kjo t'i ndihmojë të tjerët me planifikimin e URI-ve të tyre API.

    19.07.2015
    Materiale të reja

    Masterclass Coroutines: Kapitulli-3: Anulimi i korutinave dhe trajtimi i përjashtimeve.
    Mirë se vini në udhëzuesin gjithëpërfshirës mbi Kotlin Coroutines! Në këtë seri artikujsh, unë do t'ju çoj në një udhëtim magjepsës, duke filluar nga bazat dhe gradualisht duke u thelluar në..

    Faketojeni derisa ta arrini me të dhënat false
    A e gjeni ndonjëherë veten duke ndërtuar një aplikacion të ri dhe keni nevojë për të dhëna testimi që duken dhe duken më realiste ose një grup i madh të dhënash për performancën e ngarkesës...

    Si të përdorni kërkesën API në Python
    Kërkesë API në GitHub për të marrë depot e përdoruesve duke përdorur Python. Në këtë artikull, unë shpjegoj procesin hap pas hapi për të trajtuar një kërkesë API për të marrë të dhëna nga..

    Një udhëzues hap pas hapi për të zotëruar React
    Në këtë artikull, do të mësoni se si të krijoni aplikacionin React, do të mësoni se si funksionon React dhe konceptet thelbësore që duhet të dini për të ndërtuar aplikacione React. Learning..

    AI dhe Psikologjia — Pjesa 2
    Në pjesën 2 të serisë sonë të AI dhe Psikologji ne diskutojmë se si makineritë mbledhin dhe përpunojnë të dhëna për të mësuar emocione dhe ndjenja të ndryshme në mendjen e njeriut, duke ndihmuar..

    Esencialet e punës ditore të kodit tim VS
    Shtesat e mia të preferuara - Git Graph 💹 Kjo shtesë është vërtet e mahnitshme, e përdor përpara se të filloj të punoj për të kontrolluar dy herë ndryshimet dhe degët më të fundit, mund të..

    Pse Python? Zbulimi i fuqisë së gjithanshme të një gjiganti programues
    Në peizazhin gjithnjë në zhvillim të gjuhëve të programimit, Python është shfaqur si një forcë dominuese. Rritja e tij meteorike nuk është rastësi. Joshja e Python qëndron në thjeshtësinë,..