Di solito non è una prassi comune utilizzare le intestazioni per le specifiche di versione sui servizi Web in questi giorni. La stringa di query è anche una che ho visto usata; entrambi si basano sul concetto di "default sensibile" che di solito è l'ultima versione quando non sono forniti l'intestazione o la stringa di query.
Un altro approccio può essere quello di avere versioni legate ai consumatori, quindi se hai bisogno di un token di autenticazione su tutte le richieste, insieme a usarlo per identificare chi è il consumatore, può essere usato per identificare quale versione dell'API che hanno selezionato da utilizzare. Questo approccio ha lati positivi e negativi poiché, a seconda del modo in cui i consumatori lo utilizzano, potrebbero voler utilizzare più versioni contemporaneamente (forse una chiamata desidera utilizzare una versione successiva del servizio, mentre tutte le altre chiamate sono ancora su uno più vecchio).
Sconsiglio vivamente di usare un parametro nel corpo del post perché questo richiederebbe che ogni singola richiesta fosse posta, che è una cattiva forma per REST. Tuttavia, se stai utilizzando SOAP, in realtà le intestazioni SOAP sarebbero il posto perfetto dove metterlo, poiché non puoi fare affidamento sulle intestazioni HTTP poiché SOAP può essere trasmesso via non-HTTPtransports (e-mail, TCP, MQ, ecc.) .
tl; dr
Se è REST, usa le intestazioni HTTP o la stringa di query; qual è il più facile per te. Per SOAP utilizzare le intestazioni SOAP. Se nessuna di queste opzioni è valida, direi che dovrai ricorrere al classico utilizzo di URL diversi per versioni diverse.