2017-05-23 5 views
0

Ich habe eine konzeptionelle Frage mit erholsamen Apis. In meinem Datenmodell habe ich Länder und Unternehmen.Restful APIs: readonly/writeonly Felder

Benutzer der API können keine Länderobjekte erstellen. In der Datenbank gibt es konstante Einträge für Länder. Sie werden Firmenobjekte anlegen, die Land als Feld haben. Also, wenn ein Unternehmen zu schaffen, api erwartet ein Json wie:

{ 
    'name': 'company name', 
    'country': 5, // country id 
    ... 
} 

Auf der Clientseite, wenn ein Unternehmen die Anzeige, wollen wir auch sein Land anzuzeigen. Ein Ansatz hierfür ist, dass wir nach dem Abrufen einer Unternehmensressource eine weitere Abrufanforderung ausgeben, um das Länderobjekt zu erhalten. Aber dieser Ansatz ist in Bezug auf die Leistung problematisch, insbesondere auf den Seiten, auf denen wir mehrere Unternehmen aufführen.

Ein anderer Ansatz wäre zu Land Details in einem anderen Feld auf GET-Anfragen, wie sind:

{ 
    'name': 'company name', 
    'country': 5, // country id 
    'country_details': { 
     'name': 'USA', 
     'phone_code': 1, 
     'id': 5 
    } 
    ... 
} 

ich nicht denke, dass dies der richtige Ansatz entweder als Datendarstellung für die Post anders und Anfragen erhalten für dieselbe Ressource. Haben Sie Vorschläge für diesen Fall?

Antwort

1

... als Datendarstellung unterscheidet sich für Post und Get-Anforderungen für die gleiche Ressource.

POST von RFC 7231:

der POST-Methode verlangt, dass die Zielressource Prozess der Darstellung in der Anforderung eingeschlossen ...

Während PUT:

Die PUT-Methode fordert diesen Zustand an der Zielressource ist erstellt oder ersetzt durch den Zustand, der durch die Darstellung definiert ist, die in der Nutzlast der Anforderungsnachricht eingeschlossen ist. Ein erfolgreicher PUT einer gegebenen Darstellung würde vorschlagen, dass ein nachfolgender GET auf derselben Zielressource zu einer äquivalenten Darstellung führt, die in einer 200 (OK) Antwort gesendet wird.

Und:

Der grundlegende Unterschied zwischen dem Pfosten und PUT Verfahren wird durch die verschiedenen Absichten für die beiliegende Darstellung hervorgehoben. Die Zielressource in einer POST-Anforderung soll die umschlossene Darstellung gemäß der Semantik der Ressource behandeln, während die eingeschlossene Darstellung in einer PUT-Anforderung als definiert ist und den Zustand der Zielressource ersetzt.

So POST und GET Körper unterschiedlich ist kein Problem, aber es wäre für PUT und GET sein. Ich würde die Unterscheidung klarer machen, indem ich nicht dieselbe URL für POST und GET verwende.Was ohnehin Sinn macht, da die GET eine Firmenkennung enthalten würde, während die POST dies nicht tut.

Zum Beispiel, vielleicht ist es sinnvoll für Unternehmen in ein Land URL gebucht werden, so brauchen wir nicht das Land ID im Körper sind:

POST: /usa/company 

BODY: { 'name': 'company name' } 

RESPONSE: 200 with Content-Location header: /companies/1 

Dann wird die nachfolgende GET davon Content-Location:

GET: /companies/1 

RESPONSE: { 'name': 'company name', 'country': 'USA' } 
Verwandte Themen