Kako izraditi REST API: dizajn, sigurnost i objava
Za izradu REST API-ja popišite resurse kojima vaša aplikacija upravlja (korisnike, narudžbe, rezervacije), dodijelite svakom URL, primjerice /orders i /orders/{id}, i koristite HTTP metode za radnje: GET za čitanje, POST za stvaranje, PATCH za ažuriranje i DELETE za brisanje. Vraćajte JSON sa smislenim statusnim kodovima, validirajte svaki unos, zahtijevajte autentifikaciju i provjere dopuštenja za svaki zapis na poslužitelju te stranicirajte popise. Zatim dokumentirajte krajnje točke i objavite API iza HTTPS-a.
Ovaj vodič obuhvaća odluke o dizajnu, primjer skupa ruta, upute za AI alat za izradu aplikacija i pogreške koje uzrokuju sigurnosne rupe. Ako su vam API-ji novi, počnite s što je API.
Kada su vam potrebni REST API-ji
- Vaš web frontend mora spremati i učitavati podatke s poslužitelja
- Mobilnoj aplikaciji, partneru ili alatu za automatizaciju treba pristup vašim podacima
- Drugi servisi šalju vam događaje (webhookovi)
- Posao dijelite između frontend i backend tima
REST je najčešći stil, ali nije jedini. REST naspram GraphQL-a objašnjava kada je jedna fleksibilna krajnja točka za upite bolji izbor.
Prvo dizajn: resursi i rute
Zapišite imenice iz vaše aplikacije i što ljudi rade s njima. Za jednostavnu aplikaciju za rezervacije:
| Metoda | Ruta | Što radi | Kod uspjeha |
|---|---|---|---|
GET | /api/bookings | Popis rezervacija pozivatelja (stranicirano) | 200 |
POST | /api/bookings | Stvara rezervaciju | 201 |
GET | /api/bookings/{id} | Dohvaća jednu rezervaciju | 200 |
PATCH | /api/bookings/{id} | Mijenja neka polja | 200 |
DELETE | /api/bookings/{id} | Otkazuje rezervaciju | 204 |
GET | /api/health | Provjera stanja za praćenje | 200 |
Ove rute odgovaraju stvaranju, čitanju, ažuriranju i brisanju; pogledajte što je CRUD. Konvencije koje vrijedi slijediti:
- Množina imenica bez glagola u URL-ovima:
/bookings, a ne/getBookings. - Ugnježđivanje samo jedne razine kada to razjašnjava vlasništvo:
/bookings/{id}/notes. - Radnje koje nisu CRUD mogu biti podresursi:
POST /bookings/{id}/cancelje jasnije od zagonetnog PATCH-a. - Dosljeni nazivi polja, primjerice
created_atsvuda.
Statusni kodovi i greške
Koristite standardne HTTP kodove da klijenti znaju što se dogodilo bez raščlanjivanja teksta:
| Kod | Značenje | Koristi se kada |
|---|---|---|
| 200 | OK | Uspješno čitanje ili ažuriranje |
| 201 | Created | POST je nešto stvorio |
| 204 | No Content | Uspjeh bez ičega za vratiti |
| 400 | Bad Request | Unos nije prošao validaciju |
| 401 | Unauthorized | Nije prijavljen ili je token neispravan |
| 403 | Forbidden | Prijavljen je, ali nema dopuštenje |
| 404 | Not Found | Ne postoji ili pozivatelj ne smije znati da postoji |
| 409 | Conflict | Duplikat ili je termin već zauzet |
| 429 | Too Many Requests | Dosegnuto ograničenje broja zahtjeva |
| 500 | Server Error | Nešto je puklo na vašoj strani |
Vraćajte greške u jednom dosljednom JSON obliku, primjerice {"error": {"code": "slot_taken", "message": "Taj termin više nije dostupan."}}, i nikada ne uključujte stack trace ili pogreške baze podataka u odgovore.
Mogućnosti i kompromisi
| Odluka | Jednostavan izbor | Alternativa |
|---|---|---|
| Gdje API živi | API rute u vašem web okviru | Zasebna API usluga, korisna za više klijenata ili drugi jezik |
| Autentifikacija | Sesijski kolačići za vašu web aplikaciju | Tokeni (bearer tokeni ili API ključevi) za mobilne aplikacije i treće strane |
| Stranicioniranje | ?page=2&limit=20 | Pokazivač (?after=...), stabilniji za velike, promjenjive popise |
| Verzioniranje | Nema dok nemate vanjske korisnike | /v1/ u putanji kada drugi na to ovise |
| Dokumentacija | README s popisom ruta | OpenAPI specifikacija, iz koje alati generiraju interaktivnu dokumentaciju i klijentski kod |
Korak po korak
- Popišite resurse i rute kao gore, uključujući tko smije pozvati koju.
- Modelirajte podatke u bazi s poljima i vezama koje trebate.
- Prvo izradite rute za čitanje, zatim stvaranje, ažuriranje i brisanje.
- Validirajte unos na svakom zapisu pomoću biblioteke sheme: obavezna polja, tipovi, duljine, dopuštene vrijednosti. Odbijte nepoznata polja.
- Dodajte autentifikaciju, zatim autorizaciju po zapisu: dohvat
/bookings/42mora provjeriti pripada li rezervacija 42 pozivatelju, a ne samo je li netko prijavljen. - Stranicirajte svaki popis i ograničite veličinu stranice.
- Ograničite broj zahtjeva za prijavu i skupe rute. Pogledajte ograničavanje broja zahtjeva.
- Konfigurirajte CORS samo ako preglednici na drugim domenama moraju zvati API, i izričito navedite te izvore. Kako popraviti CORS greške objašnjava greške koje ćete vidjeti.
- Napišite dokumentaciju i testove za svaku rutu, uključujući slučajeve neuspjeha.
- Objavite s tajnim podacima u varijablama okruženja, HTTPS-om, zapisnicima i provjerom stanja.
Upute za AI alat za izradu aplikacija
Skela:
Napravi REST API za rezervacije s ovim rutama: GET /api/health, GET /api/bookings (stranicirano, najviše 50 po stranici), POST /api/bookings, GET /api/bookings/:id, PATCH /api/bookings/:id, DELETE /api/bookings/:id. Spremaj podatke u našu bazu. Validiraj tijela zahtjeva pomoću biblioteke sheme i odbij nepoznata polja. Vraćaj JSON greške kao {"error": {"code", "message"}} s ispravnim statusnim kodovima (400, 401, 403, 404, 409). Tajne čuvaj u varijablama okruženja.
Sigurnost:
Zahtijevaj prijavu na svakoj ruti za rezervacije. Kod svakog čitanja, ažuriranja i brisanja na poslužitelju provjeri pripada li rezervacija trenutnom korisniku; ako ne pripada, vrati 404. Nikada ne prihvaćaj ID-jeve korisnika ili uloge iz zahtjeva. Ograniči POST /api/bookings na 20 po minuti po korisniku. Greške bilježi na poslužitelju bez vraćanja stack traceova.
Dokumentacija:
Napiši OpenAPI opis ovih ruta i kratak README s primjerima zahtjeva i odgovora za svaku rutu.
Testiranje API-ja
Testirajte izvana, mimo frontenda, jer će to raditi napadači:
- Svaka ruta radi s ispravnim unosom i vraća dokumentirani oblik i kod
- Nedostajuća ili neispravna polja vraćaju 400 s jasnom porukom
- Bez tokena svaka zaštićena ruta vraća 401
- Korisnik A koji traži zapis korisnika B po ID-u dobiva 404 ili 403
- Popisi su stranicirani; ogromni
limitje ograničen - Duplikati ili sukobi pri stvaranju vraćaju 409, a ne 500
- Ograničenja broja zahtjeva vraćaju 429
- Odgovori o greškama ne sadrže stack trace, SQL ili tajne podatke
- CORS dopušta samo namjeravane izvore
Česte pogreške
- Provjera prijave, ali ne vlasništva. Najčešća rupa u API-ju: bilo koji prijavljeni korisnik može čitati bilo koji zapis promjenom ID-ja.
- Vjerovanje klijentu. Cijene, uloge i ID-jevi korisnika iz tijela zahtjeva mogu se mijenjati.
- Vraćanje cijelih redaka baze. Hashevi lozinki i interna polja curu. Odaberite što svaki odgovor uključuje.
- Neograničeni popisi. Jedan zahtjev za svim zapisima može usporiti cijelu aplikaciju.
200 OKs porukom o grešci u tijelu. Klijenti i praćenje ne mogu znati da je neuspjelo.- CORS postavljen da dopušta sve na API-ju koji koristi kolačiće.
- Nema provjere stanja ni zapisnika, pa za prekide saznajete od korisnika.
Za širu provjeru prije lansiranja pogledajte kontrolnu listu sigurnosti za aplikacije izrađene AI-jem.
Izrada REST API-ja u Mythexu
Mythex možete zamoliti za API kao dio aplikacije ili kao zasebnu uslugu. Recept u dokumentaciji REST API backend sadrži početni upit: navedite okvir i rute, zatražite jasne JSON greške, čuvajte tajne podatke u varijablama okruženja i uključite Dockerfile. Container backendi u Nodeu, Pythonu, C#-u, Javi i drugim jezicima objavljuju se putem Dockerfilea, a Mythex se brine o objavi iz Publish (API backendi). Projekt može imati web stranicu i API poslužitelj jedno uz drugo te se između njih prebacujete u pregledu. Tajne ključeve spremite kao tajne projekta, a ako API treba bazu podataka, zatražite je u chatu. Za zakazane poslove oko vašeg API-ja pogledajte kako pokrenuti pozadinske poslove.
Pitanja
Što je REST API?
REST API je način na koji programi rade s podacima vaše aplikacije putem HTTP-a. Svaka vrsta podataka je resurs s vlastitim URL-om, primjerice /orders, a standardne metode djeluju na njega: GET za čitanje, POST za stvaranje, PATCH ili PUT za ažuriranje i DELETE za brisanje. Podaci se obično šalju u formatu JSON.
U kojem jeziku trebam izraditi REST API?
Koristite ono što vi ili vaš tim možete održavati. Node.js s Expressom ili Fastifyjem, Python s FastAPI-jem te okviri u C#-u ili Javi dobro funkcioniraju. Pravila dizajna za rute, statusne kodove, validaciju i autentifikaciju važnija su od jezika.
Kako osigurati REST API?
Zahtijevajte autentifikaciju na svakoj ruti koja nije javna, na poslužitelju provjerite smije li pozivatelj pristupiti svakom pojedinom zapisu, validirajte sav unos, koristite HTTPS, ograničite broj zahtjeva i čuvajte tajne podatke u varijablama okruženja. Nikada ne vjerujte ID-jevima ili ulogama koje šalje klijent.
Trebam li zasebnu pozadinsku uslugu za REST API?
Ne uvijek. Okviri poput Next.js-a mogu poslužiti API rute uz stranice. Zasebna API usluga ima smisla kada ga koristi više klijenata (web, mobilne aplikacije, partneri) ili kada treba vlastiti jezik ili vlastito skaliranje.