Vodiči

Kako napraviti REST API: dizajn, sigurnost i objavljivanje

Da napravite REST API, navedite resurse kojima upravlja vaša aplikacija (korisnici, narudžbe, rezervacije), dodijelite svakom URL kao što su /orders i /orders/{id}, i koristite HTTP metode za radnje: GET za čitanje, POST za kreiranje, PATCH za izmjenu, DELETE za brisanje. Vraćajte JSON sa smislenim statusnim kodovima, validirajte svaki unos, zahtijevajte autentifikaciju i provjere dozvola za svaki zapis na serveru, i paginirajte liste. Zatim dokumentujte krajnje tačke i objavite API iza HTTPS-a.

Ovaj vodič pokriva odluke o dizajnu, primjer skupa ruta, upite za AI alat za izradu aplikacija i greške koje dovode do sigurnosnih propusta. Ako su API-ji novi za vas, počnite s šta je API.

Kada vam treba REST API

  • Vašem web frontendu treba da čuva i učitava podatke sa servera
  • Mobilnoj aplikaciji, partneru ili alatu za automatizaciju treba pristup vašim podacima
  • Drugi servisi vam šalju događaje (webhookovi)
  • Posao dijelite između frontend i backend tima

REST je najrašireniji stil, ali nije jedini. REST vs GraphQL objašnjava kada jedna fleksibilna krajnja tačka za upite bolje odgovara.

Prvo dizajn: resursi i rute

Zapišite imenice iz vaše aplikacije i šta ljudi rade s njima. Za jednostavnu aplikaciju za rezervacije:

MetodaRutaŠta radiKod uspjeha
GET/api/bookingsLista rezervacija pozivaoca (paginirano)200
POST/api/bookingsKreira rezervaciju201
GET/api/bookings/{id}Vraća jednu rezervaciju200
PATCH/api/bookings/{id}Mijenja neka polja200
DELETE/api/bookings/{id}Otkazuje rezervaciju204
GET/api/healthProvjera ispravnosti za praćenje200

Ovo se preslikava na kreiranje, čitanje, izmjenu i brisanje; pogledajte šta je CRUD. Konvencije koje vrijedi slijediti:

  • Imenice u množini, bez glagola u URL-ovima: /bookings, a ne /getBookings.
  • Ugnježdavajte samo jedan nivo kada to pojašnjava vlasništvo: /bookings/{id}/notes.
  • Radnje koje nisu CRUD mogu biti pod-resursi: POST /bookings/{id}/cancel je jasnije od magične PATCH izmjene.
  • Dosljedna imena polja, na primjer created_at svuda.

Statusni kodovi i greške

Koristite standardne HTTP kodove da klijenti znaju šta se desilo bez parsiranja teksta:

KodZnačenjeKoristi se kada
200OKUspješno čitanje ili izmjena
201CreatedPOST je nešto kreirao
204No ContentUspjeh bez ičega za vraćanje
400Bad RequestUnos nije prošao validaciju
401UnauthorizedNiste prijavljeni ili je token neispravan
403ForbiddenPrijavljeni ste, ali nemate pravo pristupa
404Not FoundNe postoji, ili pozivalac ne smije znati da postoji
409ConflictDuplikat, ili je termin već zauzet
429Too Many RequestsDostignuto je ograničenje broja zahtjeva
500Server ErrorNešto je puklo na vašoj strani

Vraćajte greške u jednom dosljednom JSON obliku, na primjer {"error": {"code": "slot_taken", "message": "Taj termin više nije dostupan."}}, i nikada ne uključujte stack trace-ove ili greške baze u odgovorima.

Opcije i kompromisi

OdlukaJednostavan izborAlternativa
Gdje API živiAPI rute u vašem web okviruPoseban API servis, koristan za više klijenata ili drugi jezik
AutentifikacijaSession kolačići za vašu web aplikacijuTokeni (bearer tokeni ili API ključevi) za mobilne aplikacije i treće strane
Paginacija?page=2&limit=20Kursor (?after=...), stabilnije za velike, promjenjive liste
VerzionisanjeNema dok nemate vanjske korisnike/v1/ u putanji kada drugi zavise od njega
DokumentacijaREADME sa listom rutaOpenAPI specifikacija, od koje alati prave interaktivnu dokumentaciju i klijentski kod

Korak po korak

  1. Navedite resurse i rute kao gore, uključujući ko smije pozvati koju.
  2. Modelirajte podatke u bazi sa poljima i vezama koje su vam potrebne.
  3. Napravite prvo rute za čitanje, pa za kreiranje, izmjenu i brisanje.
  4. Validirajte unos na svakom upisu pomoću biblioteke za šeme: obavezna polja, tipovi, dužine, dozvoljene vrijednosti. Odbijajte nepoznata polja.
  5. Dodajte autentifikaciju, pa autorizaciju za svaki zapis: učitavanje /bookings/42 mora provjeriti da rezervacija 42 pripada pozivaocu, a ne samo da je neko prijavljen.
  6. Paginirajte svaku listu i ograničite veličinu stranice.
  7. Ograničite broj zahtjeva za prijavu i skupe rute. Pogledajte ograničavanje broja zahtjeva.
  8. Podesite CORS samo ako pregledači na drugim domenima moraju pozivati API, i eksplicitno navedite te izvore. Kako popraviti CORS greške objašnjava greške koje ćete vidjeti.
  9. Napišite dokumentaciju i testove za svaku rutu, uključujući slučajeve neuspjeha.
  10. Objavite sa tajnama u varijablama okruženja, HTTPS-om, logovima i provjerom ispravnosti.

Upiti za vaš AI alat za izradu

Skela:

Napravi REST API za rezervacije sa ovim rutama: GET /api/health, GET /api/bookings (paginirano, najviše 50 po stranici), POST /api/bookings, GET /api/bookings/:id, PATCH /api/bookings/:id, DELETE /api/bookings/:id. Podatke čuvaj u našoj bazi. Validiraj tijela zahtjeva bibliotekom za šeme i odbij nepoznata polja. Greške vraćaj kao JSON {"error": {"code", "message"}} sa ispravnim statusnim kodovima (400, 401, 403, 404, 409). Tajne čuvaj u varijablama okruženja.

Sigurnost:

Zahtijevaj prijavu na svakoj ruti za rezervacije. Na svakom čitanju, izmjeni i brisanju provjeri na serveru da rezervacija pripada trenutnom korisniku; ako ne pripada, vrati 404. Nikada ne prihvataj ID-jeve korisnika ili uloge iz tijela zahtjeva. Ograniči POST /api/bookings na 20 po minuti po korisniku. Greške bilježi na serveru bez vraćanja stack trace-ova.

Dokumentacija:

Napiši OpenAPI opis ovih ruta i kratak README sa primjerima zahtjeva i odgovora za svaku.

Testiranje API-ja

Testirajte izvan frontenda, jer će to raditi napadači:

  • Svaka ruta radi s ispravnim unosom i vraća dokumentovani 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 dobija 404 ili 403
  • Liste su paginirane; veliki limit je ograničen
  • Duplikati ili sukobljena kreiranja vraćaju 409, a ne 500
  • Ograničenja broja zahtjeva vraćaju 429
  • Odgovori o greškama ne sadrže stack trace-ove, SQL ili tajne podatke
  • CORS dozvoljava samo izvore koje namjeravate

Česte greške

  • Provjera prijave bez provjere vlasništva. Najčešća rupa u API-ju: svaki prijavljeni korisnik može pročitati bilo koji zapis mijenjanjem ID-a.
  • Vjerovanje klijentu. Cijene, uloge i ID-jevi korisnika iz tijela zahtjeva mogu se mijenjati.
  • Vraćanje cijelih redova iz baze. Hash-evi lozinki i interna polja mogu procuriti. Birajte šta svaki odgovor sadrži.
  • Neograničene liste. Jedan zahtjev za svaki zapis može usporiti cijelu aplikaciju.
  • 200 OK sa greškom unutra. Klijenti i praćenje ne mogu znati da je nešto pošlo po zlu.
  • CORS postavljen da dozvoli sve na API-ju koji koristi kolačiće.
  • Nema provjere ispravnosti ni logova, pa za prekide saznajete od korisnika.

Za širu provjeru prije lansiranja pogledajte sigurnosnu listu za aplikacije napravljene uz AI.

Izrada REST API-ja u Mythexu

U Mythexu možete zatražiti API kao dio aplikacije ili kao zaseban servis. Recept u dokumentaciji REST API backend ima početni upit: navedite okvir i rute, tražite jasne JSON greške, čuvajte tajne u varijablama okruženja i uključite Dockerfile. Kontejnerski backendi u Node, Python, C#, Java i drugim jezicima objavljuju se preko Dockerfile-a, a Mythex vodi objavu iz Publish-a (API backendi). Projekat može istovremeno pokretati web stranicu i API server, a između njih možete prebacivati u pregledu. Tajne čuvajte kao tajne projekta, a ako API treba bazu, zatražite je u chatu. Za zakazane poslove oko vašeg API-ja pogledajte kako pokrenuti pozadinske poslove.

Pitanja

Šta je REST API?

REST API je način da programi rade s podacima vaše aplikacije preko HTTP-a. Svaka vrsta podataka je resurs sa sopstvenim URL-om, na primjer /orders, a standardne metode rade s njim: GET za čitanje, POST za kreiranje, PATCH ili PUT za izmjenu i DELETE za brisanje. Podaci se obično šalju u JSON formatu.

U kojem jeziku treba praviti REST API?

Koristite ono što vi ili vaš tim možete održavati. Node.js sa Expressom ili Fastifyjem, Python sa FastAPI-jem i C# ili Java okviri dobro funkcionišu. Pravila za rute, statusne kodove, validaciju i autentifikaciju su važnija od jezika.

Kako osigurati REST API?

Zahtijevajte autentifikaciju na svakoj ruti koja nije javna, provjerite na serveru da pozivalac smije pristupiti svakom konkretnom zapisu, validirajte sav unos, koristite HTTPS, ograničavajte broj zahtjeva i čuvajte tajne podatke u varijablama okruženja. Nikada ne vjerujte ID-jevima ili ulogama koje šalje klijent.

Treba li mi poseban backend za REST API?

Ne uvijek. Okviri poput Next.js-a mogu služiti API rute uz stranice. Poseban API servis ima smisla kada ga koristi više klijenata (web, mobilne aplikacije, partneri) ili kada treba svoj jezik ili skaliranje.

Mythex · Pricing · Izradite bilo šta uz AI · Šabloni za web stranice i aplikacije · Mythex u poređenju · Rječnik izrade aplikacija uz AI · Besplatni alati za izradu aplikacija uz AI · English

English አማርኛ العربية Български বাংলা Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi 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 简体中文 繁體中文(香港) 繁體中文(台灣)