GET API: sisu puudub: 404 vs 204 vs 200

Milline on HTTP-vastus, mille REST API peaks tagastama, kui taotletud ressurssi pole. Näiteks võite töötaja toomiseks kaaluda järgmist API-d

SAA http://yourservice.com/api/v1/employees/1
Vastuse päis: 200
Keha: {
           "nimi": "Santhosh",
           "osakond": "tehnika"
      }

Kui taotletud töötajat pole olemas

SAA http://yourservice.com/api/v1/employees/2
Vastuse päis: ???
Keha: ???

Valikuid on kolm; 404, 204 ja 200. Kõik kolm välimust sobivad kasutamiseks. Uurime neid üksikasjalikult eesmärgiga valida parim. Alustame sellest

404 ei leitud

Vastavalt HTTP olekukoodi määratlusele ...

“Server ei leidnud midagi, mis vastaks Request-URI-le. Pole teada, kas haigusseisund on ajutine või püsiv. Olekukoodi 410 (Gone) PEAKS kasutama, kui server teab mõne sisemiselt konfigureeritava mehhanismi kaudu, et vana ressurss pole püsivalt saadaval ja sellel pole edasisaadressi. Seda olekukoodi kasutatakse tavaliselt siis, kui server ei soovi täpselt paljastada, miks päringust keelduti või kui mõni muu vastus pole rakendatav. ”

Esimene väide on juhtumi jaoks täiesti mõistlik. Kui aga edasi lugeda, on selge, et 404 pole õige valik järgmistel põhjustel

  • Koodi kasutatakse siis, kui ressurss pole püsivalt saadaval, mis siin ei ole.
  • Server ei soovi täpset põhjust varjata.
  • 404 mittekasutamiseks on kolmas põhjus; seeria 4xx on mõeldud kliendi vigadest märku andmiseks. Kuid puhkeressursi puudumine pole viga. See on ajutine olek.

Mõlemad ülejäänud kandidaadid kuuluvad kategooriasse 2xx.

"See olekuklassi klass näitab, et kliendi taotlus on edukalt vastu võetud, sellest aru saadud ja vastu võetud."

Jah! see on antud juhtumi jaoks mõistlik. Seega peab üks neist veakoodidest olema parem valik võrreldes 404. Alustame vähem tuttavatega…

204 Pole sisu

Vastavalt HTTP olekukoodi määratlusele ...

Server on taotluse täitnud, kuid ei pea üksuse keha tagastama ja võib-olla soovite tagastada värskendatud metateavet. Vastus VÕIB sisaldada uut või ajakohastatud metainfot olemi päiste kujul, mida SEE korral tuleks seostada taotletud variandiga.
Kui klient on kasutajaagent, siis EI PEAKS see dokumendivaadet muutma vastavalt sellele, mis põhjustas päringu saatmise. Selle vastuse eesmärk on peamiselt toimingute sisestamine, ilma et see muudaks kasutajaagendi aktiivses dokumendivaates muudatusi, ehkki mis tahes uut või ajakohastatud metainfot PEAB rakendama dokumendile, mis on praegu kasutajaagendi aktiivses vaates.
Vastus 204 EI tohi sisaldada sõnumi keha ja seetõttu lõpeb see alati päiseväljade järel oleva esimese tühja reaga.

204 näeb välja õige kandidaat, kuna selle lühivorm ise on „Pole sisu”. Kui aga määratlust uurite, ilmneb neljandast väitest (paksus kirjas), et 204 on ideaalne, kui toiming toimub serveris. st POST, PUT või DELETE; Kuid see pole nii juhul, kui klient esitab GET-päringu.

Meil on jäänud enamkasutatav 200 OK

200 OK {tühja kehaga}

Vastavalt Http-oleku koodi määratlusele

Taotlus õnnestus. Koos vastusega tagastatud teave sõltub päringus kasutatud meetodist, näiteks:
GET üksus, mis vastab taotletud ressursile, saadetakse vastuses; …

Kui server tagastab tühja kehaga 200, võib seda tõlgendada nii, et „taotlust töödeldakse edukalt, kuid ressurss on tühi”. Ehkki HTTP-standardeid ei rikuta, näib see natuke jube. Teisi valikuid arvestades on see palju parem lahendus järgmistel põhjustel.

  • See on kooskõlas serveri üldise käitumisega.
  • Kliendikood ei pea käsitlema mõnda muud HTTP vastuse koodi.

Järeldus

Kui REST GET API päringul pole sisu, on parim lahendus vastuseks tühja kehaga 200.

SAA http://yourservice.com/api/v1/employees/2
Vastuse päis: 200
Keha: {}