Oppaat

REST-rajapinnan rakentaminen: suunnittelu, tietoturva ja julkaisu

REST-rajapinnan rakentamiseksi listaa ensin sovelluksesi resurssit (esimerkiksi käyttäjät, tilaukset, varaukset), anna kullekin URL-osoite, kuten /orders ja /orders/{id}, ja käytä toimintoihin HTTP-metodeja: GET lukuun, POST luontiin, PATCH päivitykseen ja DELETE poistoon. Palauta JSON sopivilla tilakoodeilla, validoi jokainen syöte, vaadi todennus ja tietuekohtaiset oikeustarkistukset palvelimella ja sivuta listat. Dokumentoi sen jälkeen päätepisteet ja julkaise rajapinta HTTPS:n takana.

Tämä opas käy läpi suunnittelupäätökset, toimivan reittijoukon, kehotteet tekoälysovelluksen rakentajalle ja virheet, jotka aiheuttavat tietoturva-aukkoja. Jos rajapinnat ovat sinulle uusia, aloita mikä API on.

Milloin tarvitset REST-rajapinnan

  • Verkkokäyttöliittymäsi tarvitsee palvelimen, johon tallentaa ja josta lukea dataa
  • Mobiilisovellus, yhteistyökumppani tai automaatiotyökalu tarvitsee pääsyn dataasi
  • Muut palvelut lähettävät sinulle tapahtumia (webhookit)
  • Frontend- ja backend-työ on jaettu eri tiimeille

REST on yleisin tyyli, mutta ei ainoa. REST vs GraphQL selittää, milloin yksi joustava kyselypäätepiste sopii paremmin.

Suunnittele ensin: resurssit ja reitit

Kirjoita ylös sovelluksesi substantiivit ja se, mitä ihmiset niillä tekevät. Yksinkertaisen varaussovelluksen kohdalla:

MetodiReittiMitä tekeeOnnistumiskoodi
GET/api/bookingsListaa kutsujan varaukset (sivutettuna)200
POST/api/bookingsLuo varauksen201
GET/api/bookings/{id}Hakee yhden varauksen200
PATCH/api/bookings/{id}Muuttaa joitakin kenttiä200
DELETE/api/bookings/{id}Peruuttaa varauksen204
GET/api/healthTerveystarkistus valvontaa varten200

Nämä vastaavat luontia, lukua, päivitystä ja poistoa; katso mitä CRUD on. Kannattaa noudattaa näitä käytäntöjä:

  • Monikkomuotoiset substantiivit, ei verbejä URL-osoitteissa: /bookings, ei /getBookings.
  • Sisäkkäisyys vain yhdelle tasolle, kun se selventää omistajuutta: /bookings/{id}/notes.
  • Muut kuin CRUD-toiminnot voivat olla alaresursseja: POST /bookings/{id}/cancel on selkeämpi kuin salaperäinen PATCH.
  • Yhdenmukaiset kenttänimet, kuten created_at kaikkialla.

Tilakoodit ja virheet

Käytä standardeja HTTP-koodeja, jotta asiakas tietää, mitä tapahtui, ilman tekstin jäsentämistä:

KoodiMerkitysKäytä, kun
200OKOnnistunut luku tai päivitys
201CreatedPOST loi jotakin
204No ContentOnnistui, eikä palautettavaa ole
400Bad RequestSyöte ei läpäissyt validointia
401UnauthorizedEi kirjautunut tai virheellinen tunnus
403ForbiddenKirjautunut, mutta ei oikeutta
404Not FoundEi ole olemassa, tai kutsujan ei pidä tietää sen olemassaolosta
409ConflictKaksoiskappale tai aika on jo varattu
429Too Many RequestsPyyntörajoitus ylittyi
500Server ErrorJokin meni rikki palvelimella

Palauta virheet yhtenäisessä JSON-muodossa, esimerkiksi {"error": {"code": "slot_taken", "message": "Tuo aika ei ole enää vapaa."}}, äläkä koskaan sisällytä vastauksiin kutsupinoja tai tietokantavirheitä.

Vaihtoehdot ja kompromissit

PäätösYksinkertainen valintaVaihtoehto
Missä rajapinta sijaitseeAPI-reitit verkkokehyksessäsiErillinen rajapintapalvelu, hyödyllinen useille asiakkaille tai eri kielelle
TodennusIstunto-evästeet omalle verkkosovellukselleTunnukset (bearer-tokenit tai API-avaimet) mobiilisovelluksille ja kolmansille osapuolille
Sivutus?page=2&limit=20Kursoripohjainen (?after=...), vakaampi suurille ja muuttuville listoille
VersiointiEi ennen kuin ulkopuoliset käyttäjät ovat olemassa/v1/ polussa, kun muut ovat riippuvaisia siitä
DokumentaatioREADME, jossa luetellaan reititOpenAPI-määritys, josta työkalut voivat tehdä interaktiivisen dokumentaation ja asiakaskoodin

Vaihe vaiheelta

  1. Listaa resurssit ja reitit kuten yllä, mukaan lukien se, kuka kutakin reittiä saa kutsua.
  2. Mallinna data tietokannassasi tarvittavilla kentillä ja suhteilla.
  3. Rakenna ensin lukureitit, sitten luonti, päivitys ja poisto.
  4. Validoi syötteet jokaisessa kirjoituksessa skeemakirjastolla: pakolliset kentät, tyypit, pituudet ja sallitut arvot. Hylkää tuntemattomat kentät.
  5. Lisää todennus ja sen jälkeen valtuutus tietuekohtaisesti: reitin /bookings/42 lataus on tarkistettava, että varaus 42 kuuluu kutsujalle, ei vain se, että joku on kirjautunut sisään.
  6. Sivuta jokainen lista ja rajoita sivukoko.
  7. Rajoita pyyntöjä kirjautumisessa ja raskaissa reiteissä. Katso pyyntörajoitukset.
  8. Määritä CORS vain, jos muiden domainien selaimien on kutsuttava rajapintaa, ja listaa nuo lähteet nimenomaisesti. CORS-virheiden korjaaminen selittää virheet, joita kohtaat.
  9. Kirjoita dokumentaatio ja testit jokaiselle reitille, myös virhetilanteille.
  10. Julkaise niin, että salaisuudet ovat ympäristömuuttujissa, käytössä on HTTPS, lokit ja terveystarkistus.

Kehotteet tekoälysovelluksen rakentajalle

Runko:

Luo REST-rajapinta varauksille näillä reiteillä: GET /api/health, GET /api/bookings (sivutettu, enintään 50 per sivu), POST /api/bookings, GET /api/bookings/:id, PATCH /api/bookings/:id, DELETE /api/bookings/:id. Tallenna data tietokantaan. Validoi pyyntöjen runko skeemakirjastolla ja hylkää tuntemattomat kentät. Palauta JSON-virheet muodossa {"error": {"code", "message"}} oikeilla tilakoodeilla (400, 401, 403, 404, 409). Säilytä salaisuudet ympäristömuuttujissa.

Tietoturva:

Vaadi kirjautuminen jokaiselle varausreitille. Tarkista jokaisessa luvussa, päivityksessä ja poistossa palvelimella, että varaus kuuluu nykyiselle käyttäjälle; palauta 404, jos ei kuulu. Älä koskaan hyväksy käyttäjä-ID:tä tai roolia pyynnön rungosta. Rajoita POST /api/bookings 20 kertaan minuutissa käyttäjää kohden. Kirjaa virheet palvelimelle ilman kutsupinoja vastauksissa.

Dokumentaatio:

Kirjoita näistä reiteistä OpenAPI-kuvaus ja lyhyt README, jossa on esimerkkipyynnöt ja -vastaukset jokaiselle reitille.

Rajapinnan testaaminen

Testaa rajapinta etuosan ulkopuolelta, koska hyökkääjät tekevät niin:

  • Jokainen reitti toimii oikealla syötteellä ja palauttaa dokumentoidun muodon ja koodin
  • Puuttuvat tai virheelliset kentät palauttavat 400 ja selkeän viestin
  • Ilman tunnusta jokainen suojattu reitti palauttaa 401
  • Käyttäjä A, joka pyytää käyttäjän B tietuetta ID:n perusteella, saa 404 tai 403
  • Listat on sivutettu, ja suuri limit-arvo rajoitetaan
  • Kaksoiskappaleet tai ristiriitaiset luonnit palauttavat 409, eivät 500
  • Pyyntörajat palauttavat 429
  • Virhevastaukset eivät sisällä kutsupinoja, SQL:ää tai salaisuuksia
  • CORS sallii vain aiotut lähteet

Yleisimmät virheet

  • Kirjautumisen tarkistaminen, mutta ei omistajuuden. Yleisin rajapinta-aukko: mikä tahansa kirjautunut käyttäjä voi lukea minkä tahansa tietueen vaihtamalla ID:n.
  • Asiakkaaseen luottaminen. Hinnat, roolit ja käyttäjä-ID:t pyynnön rungossa voi muokata.
  • Koko tietokantarivien palauttaminen. Salasanatiivisteet ja sisäiset kentät vuotavat. Valitse, mitä kukin vastaus sisältää.
  • Rajattomat listat. Yksi pyyntö jokaisesta tietueesta voi hidastaa koko sovelluksen.
  • 200 OK ja virheviesti sen sisällä. Asiakkaat ja valvonta eivät huomaa epäonnistumista.
  • CORS, joka sallii kaiken rajapinnassa, joka käyttää evästeitä.
  • Ei terveystarkistusta eikä lokeja, jolloin kuulet katkoksista käyttäjiltä.

Laajempaa julkaisua edeltävää tarkistusta varten katso tietoturvatarkistuslista tekoälyllä rakennetuille sovelluksille.

REST-rajapinnan rakentaminen Mythexissä

Voit pyytää Mythexiltä rajapinnan osana sovellustasi tai omana palvelunaan. Dokumentaation resepti REST API backend sisältää aloituskehotteen: nimeä kehys ja reitit, pyydä selkeät JSON-virheet, säilytä salaisuudet ympäristömuuttujissa ja lisää Dockerfile. Node-, Python-, C#-, Java- ja muut konttipohjaiset taustapalvelut julkaistaan Dockerfilen kautta, ja Mythex hoitaa julkaisun Publish-näkymästä (API-taustapalvelut). Projekti voi ajaa verkkosivua ja API-palvelinta rinnakkain, ja niiden välillä voi vaihtaa esikatselussa. Tallenna avaimet projektin salaisuuksina, ja jos rajapinta tarvitsee tietokannan, pyydä sitä chatissa. Ajastettua työtä API:n ympärille varten katso taustatehtävien ajaminen.

Kysymykset

Mikä REST-rajapinta on?

REST-rajapinta on tapa, jolla ohjelmat käsittelevät sovelluksesi dataa HTTP-yhteyden kautta. Jokainen tietotyyppi on resurssi omalla URL-osoitteellaan, kuten /orders, ja vakiometodit toimivat siihen: GET lukee, POST luo, PATCH tai PUT päivittää ja DELETE poistaa. Data lähetetään yleensä JSON-muodossa.

Millä kielellä REST-rajapinnan kannattaa rakentaa?

Käytä sitä, jota sinä tai tiimisi osaatte ylläpitää. Node.js:llä Expressin tai Fastifyn kanssa, Pythonilla FastAPI:n kanssa sekä C#- ja Java-kehykset toimivat kaikki hyvin. Reittien, tilakoodien, validoinnin ja todennuksen säännöt ovat tärkeämpiä kuin kieli.

Miten REST-rajapinnan suojaan?

Vaadi todennus jokaiselle reitille, joka ei ole julkinen, tarkista palvelimella, että kutsuja saa käyttää juuri sitä tietuetta, validoi kaikki syötteet, käytä HTTPS:ää, rajoita pyyntöjen määrää ja säilytä salaisuudet ympäristömuuttujissa. Älä koskaan luota asiakkaan lähettämiin tunnuksiin tai rooleihin.

Tarvitsenko erillisen taustapalvelun REST-rajapinnalle?

Et aina. Kehykset, kuten Next.js, voivat palvella API-reittejä sivujen rinnalla. Erillinen rajapintapalvelu on järkevä, kun useat asiakkaat (verkko, mobiili, yhteistyökumppanit) käyttävät sitä tai se tarvitsee oman kielensä tai skaalautumisensa.

Mythex · Pricing · Rakenna mitä tahansa tekoälyllä · Verkkosivu- ja sovellusmallipohjat · Mythex vertailussa · Tekoälysovellusten rakentamisen sanasto · Ilmaiset työkalut tekoälysovellusten rakentamiseen · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)