Ich entwickle einen einfachen RESTful-Service für Turniere und Zeitpläne. Wenn ein Turnier über eine POST-Anforderung erstellt wird, die einen JSON-Body enthält, wird das Turnier BiMap
in eine DAO-Implementierung eingefügt , die wie folgt deklariert ist:
private BiMap<String, Tournament> tournaments = Maps.synchronizedBiMap(HashBiMap.create());
Wenn ein Turnier erstellt wird, wird die zugehörige Zeichenfolgen-ID zurückgegeben, damit der Benutzer künftig auf dieses Turnier verweisen kann. Er / sie kann Informationen vom neuen Turnier zurückerhalten, indem er / sie die folgende Anfrage ausführt:
GET http://localhost:8080/eventscheduler/c15268ce-474a-49bd-a623-b0b865386f39
Aber was ist, wenn kein Turnier mit einer solchen ID gefunden wird? Bisher gebe ich eine Antwort zurück. Nun, Jersey tut es für mich, wenn ich null
von einer seiner Methoden zurückkehre. Dies ist die Methode, die der obigen Route entspricht:
@Path("/{id}")
@GET
@Produces(MediaType.APPLICATION_JSON)
public Tournament getTournament(@PathParam("id") String id) {
Optional<Tournament> optTournament = tournamentDao.getTournament(id);
if (optTournament.isPresent())
return optTournament.get();
return null;
}
Meine Frage lautet: Ist es in Ordnung, eine 204: No Content
Antwort zurückzugeben, oder sollte es stattdessen eine 404
Antwort sein, da die Ressource nicht gefunden wurde?
Wenn ich es in eine 404 ändern sollte, offensichtliche Frage: Ich sollte die Methodensignatur ändern, oder? Da jetzt ein Turnier (vom Typ Tournament
) möglicherweise nicht zurückgegeben wird, sollte die Methode anders aussehen. Soll ich Response
stattdessen den Typ als Rückgabetyp verwenden?
quelle
{content: ''}
), wäre eine 204-Antwort unangemessen.2015-02-29
wäre die Verwendung besser, da es sich um ein Datum handelt, das überhaupt nicht existiert?Sie sollten eine 404 zurückgeben. Sie können dies tun, indem Sie eine NotFoundException auslösen ( https://jersey.java.net/apidocs/2.6/jersey/javax/ws/rs/NotFoundException.html ).
Schauen Sie sich auch diese SO-Frage an, wenn Sie den zurückgegebenen Inhaltstyp /programming/23858488/how-i-return-http-404-json-xml-response-in-jax-rs- steuern müssen. Trikot auf Kater
quelle
Ihre Anfrage ist
GET http://localhost:8080/eventscheduler/c15268ce-474a-49bd-a623-b0b865386f39
.Wenn
http://localhost:8080/eventscheduler/
es nicht als Endpunkt vorhanden ist, sollten Sie eine 404 zurückgeben. Sie versuchen, auf eine Ressource (/eventscheduler/
) zuzugreifen , die nicht vorhanden ist. Dies würde einem Client anzeigen, dass ein Server vorhanden istlocalhost:8080
, aber ameventscheduler
Endpunkt befindet sich nichts .Wenn
http://localhost:8080/eventscheduler/
als Endpunkt vorhanden, aber die erforderlichen Ressourcen nicht verfügbar sind, ist ein 5xx-Fehler angebracht. Ein gutes Beispiel hierfür wäre, wenn eine Datenbank offline ist und Sie einen 503 zurückgeben könnten. Natürlich möchten Sie möglicherweise nur einen generischen 500-Fehler anstelle einer bestimmten Instanz zurückgeben.Wenn es
http://localhost:8080/eventscheduler/
existiert, aber das durch dargestellte Dingc15268ce-474a-49bd-a623-b0b865386f39
nicht existiert, würde ich eine 200 mit einem Körper zurückgeben, der die Details angibt. Der Endpunkt ist vorhanden, die Anfrage war vollständig gültig und konnte verarbeitet werden, es gab jedoch keine Übereinstimmung.Wenn die Anfrage Ihres Kunden an den Endpunkt nicht gültig wäre, würden Sie sich die anderen 4xx-Fehler ansehen. Sie können angeben, dass der Client nicht berechtigt ist, auf den Endpunkt oder die mit einem 401 oder 403 angeforderten Elemente zuzugreifen, oder mit einem 400 angeben, dass die Anforderung ungültig ist. Mit all diesen können zusätzliche Informationen im Antworttext bereitgestellt werden.
quelle
/user
und wird wie verwendet/[email protected]
. Als API-Konsument möchte ich wissen, ob/user
der Server aus irgendeinem Grund nicht vorhanden ist (möglicherweise wurde er in Version 2 der API hinzugefügt und der Server befindet sich in Version 1 oder er wurde in Version 3 umbenannt) oder ob der Benutzer die E-Mail hat[email protected]
existiert nicht. Der erste ist ein 404, der zweite ist ein 200 mit einem Text, der angibt, dass kein Benutzer diese E-Mail-Adresse hat.