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.