REST dell'aggiornamento dell'API REST di riferimento

2

Sto lavorando a un progetto in cui stiamo creando alcune API REST

La mia domanda è quando stiamo creando un'API per aggiornare un'entità che contiene un riferimento figlio, cioè

{
    name: '...',
    email: '...',
    country: {
        id: xxx,
        name: 'xxx'
    }
}

L'API di aggiornamento accetta un oggetto Paese o solo un ID Paese. L'oggetto Paese non verrà aggiornato, solo il riferimento al paese viene aggiornato?

La mia preferenza è l'ID del paese poiché non stiamo aggiornando l'oggetto Paese, ma il mio college pensa diversamente.

    
posta Charlie Wu 14.12.2016 - 02:24
fonte

2 risposte

6

Perché non registrare solo country_id e individuare internamente l'id per denominare la mappatura? cioè.

{
    name: '...',
    email: '...',
    country_id: xxx
}

Puoi anche utilizzare country_code anziché un ID interno come riferimento. Meno cose per i clienti da passare, meno possibilità di dati incasinati (ad esempio, qualcuno passa l'id del paese come US e il nome del paese come Canada ).

In generale, evitare di passare i dati ridondanti. Come si sviluppa la tua API, questo aggiunge. Inoltre, sono necessari più dati per passare in rassegna, mantenere sicuri, convalidare e ripulire. Un'eccezione è che se tutti i tuoi client hanno sempre i dati in un determinato formato, allora avrà senso rendere loro più facile il trasferimento dei dati in qualsiasi formato / struttura che hanno e tradurli sul lato server delle preferenze.

    
risposta data 14.12.2016 - 03:23
fonte
2

In un'API REST lavorerai con le risorse.

Una citazione da Roy Fielding Tesi di laurea REST :

The key abstraction of information in REST is a resource. Any information that can be named can be a resource: a document or image, a temporal service (e.g. "today's weather in Los Angeles"), a collection of other resources, a non-virtual object (e.g. a person), and so on. In other words, any concept that might be the target of an author's hypertext reference must fit within the definition of a resource. A resource is a conceptual mapping to a set of entities, not the entity that corresponds to the mapping at any particular point in time.

Nel tuo caso hai una risorsa Client e una Country, e c'è una relazione tra loro. Ma per evitare confusione - tra API client e risorse client - cambiamo le risorse in Ordine e Tabella.

Devi lavorare separatamente con ciascuno di essi.

Le operazioni in un URI di risorsa operano solo in quella risorsa.

/service/order/{id} //handles orders operations
/service/table/{id} //handles tables operations

Utilizza Hypermedia come motore dello stato dell'applicazione ( HATEOAS )

A REST client enters a REST application through a simple fixed URL. All future actions the client may take are discovered within resource representations returned from the server. The media types used for these representations, and the link relations they may contain, are standardized. The client transitions through application states by selecting from the links within a representation or by manipulating the representation in other ways afforded by its media type. In this way, RESTful interaction is driven by hypermedia, rather than out-of-band information.

Nel tuo caso possiamo ottenere un cenario come questo:

1) Un client API richiede una risorsa Order.

GET /service/order/12345 HTTP/1.1
Host: restserviceurl.com
Accept: application/xml

2) L'API risponde.

HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: ...

<?xml version="1.0"?>
<order>
  <id>12345</id>
  <description>An delicious hamburger ASAP</description>
  <link rel="table" href="https://service/table/6789" />
</order>

Si noti che la risposta contiene un collegamento. Se il client API desidera manipolare la risorsa Tabella, seguirà il collegamento per eseguire qualsiasi operazione su tale risorsa.

Quindi, se il client API ha bisogno della tabella della risorsa ordine, eseguirà un GET su quel link.

Con tutto ciò che è stato detto, nel tuo caso si desidera aggiornare il paese di un cliente. Tutto quello che devi fare è cambiare l'ID del Paese nella risorsa Cliente. Esegui un POST per creare una nuova risorsa Client o PUT per modificarne uno esistente nell'URI della API client.

Se hai bisogno di cambiare la Risorsa Paese fallo sull'altro URI.

    
risposta data 15.12.2016 - 16:00
fonte

Leggi altre domande sui tag