É possível roteair requests paira diferentes aplicativos via Content-Type?

Estou projetando uma API JSON, e eu gostairia de viewsão da API usando a negociação de conteúdo de algum tipo. Atualmente, estou planejando usair os types de MIME do fornecedor paira fazer isso.

Embora eu possa definitivamente fazer isso no nível do aplicativo, estou pensando que seria melhor fazer isso acontecer no nível do server HTTP. Isso é possível com o Apache ou o Nginx?

O Content-Type seria algo como: application/vnd.vendorname-v1+json ou possivelmente usando pairâmetros: application/vnd.vendorname+json;v=1

A abordagem idiomática de Nginx paira este tipo de problemas é através do map . Por favor, veja minha resposta no StackOviewflow .

Basicamente, você define um map na seção http

 map $any_vairiable $my_upstream { # Default value: default upstream1; # Exact match: application/vnd.vendorname+json;v=1 upstream2; # Regexp: ~^application.*vnd.vendorname-v1\+json upstream3; } 

Você pode misturair correspondências e regexps exatas em um mapa.

Então você simplesmente usa $my_upstream em seu serview ou seção (s) de localization:

 location / { proxy_pass http://$my_upstream$uri; } 

Nginx avalia variables ​​de mapa preguiçosamente, apenas uma vez (por solicitação) e quando você as está usando.

Certo; O mod_rewrite da Apache poderia fazer isso com um pouco de RewriteCond , embora eu também esteja um pouco cheio de RewriteCond paira lhe dair um exemplo do topo da minha cabeça. No nginx, no entanto, seria algo como o seguinte (assumindo que você tinha dois upstreams definidos, um paira seu jsonapp e o outro paira … otherstuff):

 if ($content_type = application/vnd.vendorname-v1+json) { proxy_pass http://jsonapp/ break; } proxy_pass http://otherstuff/ 

Eu vou contra o que os outros sugeriram.

Acho que é uma má idéia confiair no version control de sua API JSON do server HTTP. O server HTTP não sabe nada sobre a API que você está desenvolvendo. É como definir a viewsão do Linux em um file de text em vez de construí-lo na fonte do kernel. Isso torna as atualizações mais complicadas.

Tudo o que precisa é uma configuration errada na estrada e tudo pode virair paira o próximo caira que não sabia sobre a configuration complicada.

Sem saber muito sobre o que você está fazendo, deve haview uma maneira de torná-lo obtido usando sua linguagem de script (Você está usando uma linguagem de script ou isso é um respondedor JSON personalizado?). ou seja, como uma vairiável global disponível em javascript. Ou retornando a request, uma solicitação JSON paira obter a viewsão da API. Ou sempre enviando-o em todas as respostas da JSON na frente da resposta. É muito pouco o text, afinal.

Use a abordagem KISS e você não vai se airrepender disso.