2017-05-06 36 views
0

Für das Front-End einer Webanwendung, die ich erstelle, verwende ich einen REST-fähigen Webdienst, um meine Daten abzurufen. Ein solcher Anruf und Antwort könnte wie folgt aussehen:JavaScript-Mapping von JSON-Daten aus der externen REST-API

// GET api.example.com/persons/3 
{ 
    p_id: 3, 
    p_fn: 'Jon', 
    p_ln: 'Smith', 
    p_addr: { 
     str: 'Baker Street', 
     city: 'London', 
     cntry: 'GB' 
    }, 
    // and more stuff... 
} 

Ich brauche nicht alle diese Daten in meiner Anwendung, so habe ich beschlossen, sie in meine eigene Klasse abzubilden. Dies gibt auch den Vorteil der Umbenennung und Umstrukturierung die Eigenschaften, von den externen API Entkopplung und die Fähigkeit, einige Methoden hinzuzufügen:

class Person { 

    name: { 
     first: string, 
     last: string 
    }; 
    country: string; 

    getFullName(): string { 
     return this.name.first + ' ' + this.name.last; 
    } 

} 

Dieses Beispiel Typoskript verwendet, sondern auch Klassen ES6 Verwendung erstellt werden kann

Das funktioniert gut, bis ich die Eigenschaften dieses Objekts ändern möchte.

Zum Beispiel muss das Person s Land geändert werden, weil er nach Frankreich zog. Und auch sein Name bearbeitet wird, weil es ein Fehler war:

person.country = 'FR' 
person.name.first = 'John' 

Jetzt müssen die Änderungen zurück an den externen Dienst gesendet werden:

// PUT api.example.com/persons/3 
{ 
    p_id: 3, 
    p_fn: 'John', 
    p_ln: 'Smith', 
    p_addr: { 
     str: 'Baker Street', 
     city: 'London', 
     cntry: 'FR' // This is where my example falls apart 
    }, 
    // and more stuff... 
} 

Aber wenn keine Eigenschaft geändert wurde, muss der Anruf nicht überhaupt ausgeführt werden, also muss es eine Art von Erkennung dafür geben.

Also im Grunde muss ich ständig zwischen diesen lokalen Instanzen und DTO-ähnliche Objekte hin und her übersetzen. Was wäre der beste Weg, dies einzurichten?

Gibt es einen Standard Weg dies zu tun? Ich habe etwas über ORM oder Persistenzmuster gehört, aber ist das auf JavaScript anwendbar? Gibt es Best Practices für diese Client-Seite?

Antwort

0

Wenn Sie die Daten zurücksenden und es sich um UPDATE und nicht um PATCH handelt, sollte Ihre Klasse alle Eigenschaften enthalten, die zum Aktualisieren der Ressource erforderlich sind.

Wie wäre es mit einem constructor method für Ihre Klasse, wo Sie in der JSON übergeben? Und eine toJSON-Klassenmethode, bei der Sie die Eigenschaften in korrekt formatiertem JSON analysieren.

+0

Wie würde diese ToJSON-Methode aussehen? Die Änderungen müssen mit dem alten JSON zusammengeführt werden, der irgendwo gespeichert werden muss. Und das Speichern in der Klasse ist wahrscheinlich nicht sehr effizient. –

Verwandte Themen