SlideShare uma empresa Scribd logo
1 de 4
Baixar para ler offline
RESTful considerada
prejudicial – Parte 2
Misturando códigos de status HTTP
com Respostas Negócios
sinalização idiomaticamente erros de negócios através resto deve
usar 4xx classe de códigos de status. No entanto, estes erros não
foram projetados para sinalizar casos de negócios, então eu
constantemente encontrar-me a tentar mapear os códigos 4xx
aos resultados de negócios. Teste CAPTCHA falhou? Vamos
torná-lo 400 Bad pedido. erro de validação de formulário? 417
Expectation falhado? violação de restrição devido à duplicação?
409 Conflito? Mas o que sobre a exceção de bloqueio otimista? O
que se o cliente tem saldo insuficiente? E se ... Esses códigos de
erro são projetados para recuperação de documentos, não é rico
de negócios por trás back-end. Você acaba com colocar tudo sob
o mesmo código de status ou a construção de complexo
documento tradução. Nós inventamos exceções, falhas, Either<T> -
apenas para limitar-nos de repente conjunto fixo de códigos de
erro numéricos.
404 é especialmente problemático, porque é tão prevalente. Ao
usar API RESTful você nunca pode dizer se 404 é uma
circunstância de negócios ou apenas um erro de digitação na
URL. Soa como uma receita para o inferno depuração distribuído.
Ah, e eu mencionei há nenhuma maneira padrão de codificação
de erros?
Acoplamento temporal
APIs RESTful são muito populares entre os fanboys Microservice.
Mas vamos voltar ao básico. APIs RESTful são baseados em
HTTP, que é um protocolo de solicitação-resposta construída em
cima de TCP / IP. TCP / IP cria uma abstração de conexão no
topo do protocolo IP orientada para o pacote. IP é apenas capaz
de entregar mensagens de uma máquina para outra. Através da
construção de todos esses níveis de abstrações que se esqueceu
de que web é realmente assíncrona. Acreditamos que, usando
JSON frouxa contrato-menos não somos mais acoplar sistemas
juntos. Mas há uma outra dimensão do acoplamento: a
dependência temporal. Se um sistema precisa notificar outra
sobre algum evento, será que eles realmente precisam existir ao
mesmo tempo. Em alguns casos, normalmente implementado
com GET, solicitação-resposta faz sentido. Mas na maioria dos
casos o que realmente queremos é um fogo-e-esqueça, em
situação de menos uma vez a semântica. arquiteturas
distribuídas controlados por mensagem provou ser muito mais
robusto e tolerante a falhas. Dois sistemas já não precisam de ver
uns aos outros e viver ao mesmo tempo. Além disso, um sistema
deixará de quebrar outro se ele está produzindo muitas
solicitações. Basta colocar uma fila persistente entre dois
sistemas. Esta abordagem tem várias vantagens:
• produtores e consumidores pode ser reiniciado a qualquer
momento sem perda de dados ou a qualidade do serviço
degradado
• escalabilidade é mais fácil de conseguir, não há necessidade de
balanceamento de carga complexa
• podemos enviar mensagens para múltiplos sistemas de uma só
vez
• depuração pode ser mais fácil com padrão tap fio
RESTful também não tem noção de pedidos de sentido único.
POST sem corpo é tão perto quanto você pode obter. Isso é
problemático, porque muitos casos de negócios são naturalmente
ajustando o fogo-e-esqueça semântica. Quando estou publicando
eventos de domínio Eu não me importo sobre a resposta, mas os
serviços REST são muito intimamente ligado com o protocolo
HTTP.
Somente interações de solicitação-resposta típico (como a
recuperação de um usuário por ID) não são um bom ajuste para
as filas embora. filas temporais com IDs de correlação são
desajeitados e introduzir uma grande quantidade de latência.
Sem padrões
Não existem normas, mas apenas boas práticas, por vezes,
contraditórias. Nós não podemos até concordar se os recursos
devem estar no singular ou no plural, para não mencionar
parâmetros de paginação, tratamento de erros, HATEOAS ...
Você vai encontrar pessoas discutindo como RESTful é o seu
serviço, de acordo com Richardson Modelo de Maturidade. Falta
de normas significa que todo mundo pode nomear seu serviço
RESTful. Pode ser um exemplo vivo de dissertação de Roy
Fielding, que poderia ser um <form> manipulador POST - contanto
que eles usam HTTP, eles são REST. Isto também significa que
você nunca agora como interagir adequadamente com qualquer
API. Que cabeçalhos você deve usar, como decodificar a
resposta, como o conteúdo tipo é negociado (cabeçalhos?
Extensão no URL?) E quais tipos são suportados.
Compatibilidade com versões
anteriores
serviços RESTful têm poucas formas imperfeitas de manipulação
de compatibilidade com versões anteriores:
• única adição de campos, não remover ou alterar. Eu
testemunhei uma situação onde alguém fixa um erro de digitação
inocente em um objeto que passou a ser codificado diretamente
como JSON. Este caiu outro sistema
• Tipo de conteúdo com controle de versão - dolorosa e requer a
manutenção de várias versões
• HTTP redireciona se os recursos são renomeados - só funciona
se os clientes são RESTful suficiente, evitando URLs codificadas
inteiramente
Cada técnica acima tem seus próprios problemas, serviços
RESTful simplesmente não são projetados para ser em evolução.
Alternativas
Algumas perguntas que eu quero que você pergunte a si mesmo
antes de saltar para JSON sobre HTTP RESTO hippie-estilo
a.k.a. da integração:
• é o desempenho é uma preocupação? Em seguida, escolher o
formato mais compacto que não requer compressão caro
• Você realmente precisa de bloqueio de solicitação-resposta? Se
não, considere fila de mensagens ou loja, como Kafka
• está fazendo a implantação contínua ou auto-scaling? Em
seguida, escolher a tecnologia que faz cliente não par eo servidor
temporariamente e é sem conexão, veja acima
• são as suas interacções complexas ou talvez você está
extraindo API existente / interface a partir do módulo de serviço
distribuído? Em seguida, escolher a tecnologia mais perto de
RPC clássico
• você precisa semântica exatamente-uma vez? Se assim for,
nada vai ajudá-lo, desculpe.

Mais conteúdo relacionado

Semelhante a RESTful APIs - Limitações e alternativas

Integrando sua App ao Mundo via REST/JSON
Integrando sua App ao Mundo via REST/JSONIntegrando sua App ao Mundo via REST/JSON
Integrando sua App ao Mundo via REST/JSONMario Guedes
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkMario Guedes
 
Testes webservice tdc
Testes webservice tdcTestes webservice tdc
Testes webservice tdcRicardo Moura
 
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...Vinicius Pulgatti
 
4. Introdução ao PHP.pdf
4. Introdução ao PHP.pdf4. Introdução ao PHP.pdf
4. Introdução ao PHP.pdfRubenManhia
 
Desenvolvimento de uma API RESTful com Java EE
Desenvolvimento de uma API RESTful com Java EEDesenvolvimento de uma API RESTful com Java EE
Desenvolvimento de uma API RESTful com Java EELuan Felipe Knebel
 
SoapUI & Jmeter Basics Web service testing
SoapUI & Jmeter Basics Web service testingSoapUI & Jmeter Basics Web service testing
SoapUI & Jmeter Basics Web service testingRicardo Moura
 
Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes c...
Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes c...Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes c...
Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes c...Danilo Sato
 
O básico do uso de rest vs soap
O básico do uso de rest vs soapO básico do uso de rest vs soap
O básico do uso de rest vs soapJeison Barros
 
Navegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo javaNavegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo javaAndrei Tognolo
 
Objects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do códigoObjects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do códigoBonoBee
 
Matando web forms e modernizando um grande varejista
Matando web forms e modernizando um grande varejistaMatando web forms e modernizando um grande varejista
Matando web forms e modernizando um grande varejistaJosé Roberto Araújo
 
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014Gilmar PSL
 
Projeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.SProjeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.SThoughtworks
 
Replicacao Object Sistemas
Replicacao Object SistemasReplicacao Object Sistemas
Replicacao Object Sistemastaniamaciel
 
REST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfREST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfBrunoAlbuquerque864673
 

Semelhante a RESTful APIs - Limitações e alternativas (20)

Integrando sua App ao Mundo via REST/JSON
Integrando sua App ao Mundo via REST/JSONIntegrando sua App ao Mundo via REST/JSON
Integrando sua App ao Mundo via REST/JSON
 
Te aula1
Te aula1Te aula1
Te aula1
 
Trabalho Final PSDC - Simião
Trabalho Final PSDC - SimiãoTrabalho Final PSDC - Simião
Trabalho Final PSDC - Simião
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST Framework
 
Testes webservice tdc
Testes webservice tdcTestes webservice tdc
Testes webservice tdc
 
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
Apresentacao Boas praticas, revisão java, SOLID, KISS, DRY, design patterns, ...
 
4. Introdução ao PHP.pdf
4. Introdução ao PHP.pdf4. Introdução ao PHP.pdf
4. Introdução ao PHP.pdf
 
Desenvolvimento de uma API RESTful com Java EE
Desenvolvimento de uma API RESTful com Java EEDesenvolvimento de uma API RESTful com Java EE
Desenvolvimento de uma API RESTful com Java EE
 
XML-RPC.pdf
XML-RPC.pdfXML-RPC.pdf
XML-RPC.pdf
 
SoapUI & Jmeter Basics Web service testing
SoapUI & Jmeter Basics Web service testingSoapUI & Jmeter Basics Web service testing
SoapUI & Jmeter Basics Web service testing
 
Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes c...
Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes c...Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes c...
Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes c...
 
O básico do uso de rest vs soap
O básico do uso de rest vs soapO básico do uso de rest vs soap
O básico do uso de rest vs soap
 
Navegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo javaNavegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo java
 
Objects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do códigoObjects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do código
 
Estudos Technocorp
Estudos TechnocorpEstudos Technocorp
Estudos Technocorp
 
Matando web forms e modernizando um grande varejista
Matando web forms e modernizando um grande varejistaMatando web forms e modernizando um grande varejista
Matando web forms e modernizando um grande varejista
 
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
 
Projeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.SProjeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.S
 
Replicacao Object Sistemas
Replicacao Object SistemasReplicacao Object Sistemas
Replicacao Object Sistemas
 
REST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfREST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdf
 

Mais de Jeison Barros

Introdução a RAML - parte 1
Introdução a RAML -  parte 1Introdução a RAML -  parte 1
Introdução a RAML - parte 1Jeison Barros
 
Estratégia api e design
Estratégia api e designEstratégia api e design
Estratégia api e designJeison Barros
 
Transformando eficientemente resultados de uma consulta jdbc para json
Transformando eficientemente resultados de uma consulta jdbc para jsonTransformando eficientemente resultados de uma consulta jdbc para json
Transformando eficientemente resultados de uma consulta jdbc para jsonJeison Barros
 
Como criar um http proxy dinamico com mule parte 3
Como criar um http proxy dinamico com mule   parte 3Como criar um http proxy dinamico com mule   parte 3
Como criar um http proxy dinamico com mule parte 3Jeison Barros
 
Como criar um http proxy dinamico com mule parte 1
Como criar um http proxy dinamico com mule   parte 1Como criar um http proxy dinamico com mule   parte 1
Como criar um http proxy dinamico com mule parte 1Jeison Barros
 
Conectando seu banco de dados usando jdbc
Conectando seu banco de dados usando jdbcConectando seu banco de dados usando jdbc
Conectando seu banco de dados usando jdbcJeison Barros
 
Habilidades necessárias para integrar aplicativos e dados
Habilidades necessárias para integrar aplicativos e dadosHabilidades necessárias para integrar aplicativos e dados
Habilidades necessárias para integrar aplicativos e dadosJeison Barros
 
Qual integration framework você deve usar parte 2
Qual integration framework você deve usar parte 2Qual integration framework você deve usar parte 2
Qual integration framework você deve usar parte 2Jeison Barros
 
Qual integration framework você deve usar parte 1
Qual integration framework você deve usar parte 1Qual integration framework você deve usar parte 1
Qual integration framework você deve usar parte 1Jeison Barros
 
Consumindo soap wsdl
Consumindo soap wsdlConsumindo soap wsdl
Consumindo soap wsdlJeison Barros
 
Trabalhando com anexos soap usando módulo cxf do mule
Trabalhando com anexos soap usando módulo cxf do muleTrabalhando com anexos soap usando módulo cxf do mule
Trabalhando com anexos soap usando módulo cxf do muleJeison Barros
 
Começando com mulesoft e maven
Começando com mulesoft e mavenComeçando com mulesoft e maven
Começando com mulesoft e mavenJeison Barros
 
Estudo de caso: Mule como um transporte JMS Comum
Estudo de caso: Mule como um transporte JMS ComumEstudo de caso: Mule como um transporte JMS Comum
Estudo de caso: Mule como um transporte JMS ComumJeison Barros
 
Mule esb com framework cucumber part 1
Mule esb com framework cucumber part 1Mule esb com framework cucumber part 1
Mule esb com framework cucumber part 1Jeison Barros
 
Mule esb com framework cucumber part 2
Mule esb com framework cucumber part 2Mule esb com framework cucumber part 2
Mule esb com framework cucumber part 2Jeison Barros
 
Explorando mule esb sftp adapter
Explorando mule esb sftp adapterExplorando mule esb sftp adapter
Explorando mule esb sftp adapterJeison Barros
 
Fluxo dinâmicos usando spring aplication
Fluxo dinâmicos usando spring aplicationFluxo dinâmicos usando spring aplication
Fluxo dinâmicos usando spring aplicationJeison Barros
 
Data mapping com Groovy - Part 2
Data mapping com Groovy - Part 2Data mapping com Groovy - Part 2
Data mapping com Groovy - Part 2Jeison Barros
 

Mais de Jeison Barros (20)

Pdfteste
PdftestePdfteste
Pdfteste
 
Introdução a RAML - parte 1
Introdução a RAML -  parte 1Introdução a RAML -  parte 1
Introdução a RAML - parte 1
 
Estratégia api e design
Estratégia api e designEstratégia api e design
Estratégia api e design
 
Transformando eficientemente resultados de uma consulta jdbc para json
Transformando eficientemente resultados de uma consulta jdbc para jsonTransformando eficientemente resultados de uma consulta jdbc para json
Transformando eficientemente resultados de uma consulta jdbc para json
 
Como criar um http proxy dinamico com mule parte 3
Como criar um http proxy dinamico com mule   parte 3Como criar um http proxy dinamico com mule   parte 3
Como criar um http proxy dinamico com mule parte 3
 
Como criar um http proxy dinamico com mule parte 1
Como criar um http proxy dinamico com mule   parte 1Como criar um http proxy dinamico com mule   parte 1
Como criar um http proxy dinamico com mule parte 1
 
Rest api vs SOAP
Rest api vs SOAPRest api vs SOAP
Rest api vs SOAP
 
Conectando seu banco de dados usando jdbc
Conectando seu banco de dados usando jdbcConectando seu banco de dados usando jdbc
Conectando seu banco de dados usando jdbc
 
Habilidades necessárias para integrar aplicativos e dados
Habilidades necessárias para integrar aplicativos e dadosHabilidades necessárias para integrar aplicativos e dados
Habilidades necessárias para integrar aplicativos e dados
 
Qual integration framework você deve usar parte 2
Qual integration framework você deve usar parte 2Qual integration framework você deve usar parte 2
Qual integration framework você deve usar parte 2
 
Qual integration framework você deve usar parte 1
Qual integration framework você deve usar parte 1Qual integration framework você deve usar parte 1
Qual integration framework você deve usar parte 1
 
Consumindo soap wsdl
Consumindo soap wsdlConsumindo soap wsdl
Consumindo soap wsdl
 
Trabalhando com anexos soap usando módulo cxf do mule
Trabalhando com anexos soap usando módulo cxf do muleTrabalhando com anexos soap usando módulo cxf do mule
Trabalhando com anexos soap usando módulo cxf do mule
 
Começando com mulesoft e maven
Começando com mulesoft e mavenComeçando com mulesoft e maven
Começando com mulesoft e maven
 
Estudo de caso: Mule como um transporte JMS Comum
Estudo de caso: Mule como um transporte JMS ComumEstudo de caso: Mule como um transporte JMS Comum
Estudo de caso: Mule como um transporte JMS Comum
 
Mule esb com framework cucumber part 1
Mule esb com framework cucumber part 1Mule esb com framework cucumber part 1
Mule esb com framework cucumber part 1
 
Mule esb com framework cucumber part 2
Mule esb com framework cucumber part 2Mule esb com framework cucumber part 2
Mule esb com framework cucumber part 2
 
Explorando mule esb sftp adapter
Explorando mule esb sftp adapterExplorando mule esb sftp adapter
Explorando mule esb sftp adapter
 
Fluxo dinâmicos usando spring aplication
Fluxo dinâmicos usando spring aplicationFluxo dinâmicos usando spring aplication
Fluxo dinâmicos usando spring aplication
 
Data mapping com Groovy - Part 2
Data mapping com Groovy - Part 2Data mapping com Groovy - Part 2
Data mapping com Groovy - Part 2
 

RESTful APIs - Limitações e alternativas

  • 1. RESTful considerada prejudicial – Parte 2 Misturando códigos de status HTTP com Respostas Negócios sinalização idiomaticamente erros de negócios através resto deve usar 4xx classe de códigos de status. No entanto, estes erros não foram projetados para sinalizar casos de negócios, então eu constantemente encontrar-me a tentar mapear os códigos 4xx aos resultados de negócios. Teste CAPTCHA falhou? Vamos torná-lo 400 Bad pedido. erro de validação de formulário? 417 Expectation falhado? violação de restrição devido à duplicação? 409 Conflito? Mas o que sobre a exceção de bloqueio otimista? O que se o cliente tem saldo insuficiente? E se ... Esses códigos de erro são projetados para recuperação de documentos, não é rico de negócios por trás back-end. Você acaba com colocar tudo sob o mesmo código de status ou a construção de complexo documento tradução. Nós inventamos exceções, falhas, Either<T> - apenas para limitar-nos de repente conjunto fixo de códigos de erro numéricos. 404 é especialmente problemático, porque é tão prevalente. Ao usar API RESTful você nunca pode dizer se 404 é uma circunstância de negócios ou apenas um erro de digitação na URL. Soa como uma receita para o inferno depuração distribuído. Ah, e eu mencionei há nenhuma maneira padrão de codificação de erros? Acoplamento temporal APIs RESTful são muito populares entre os fanboys Microservice. Mas vamos voltar ao básico. APIs RESTful são baseados em HTTP, que é um protocolo de solicitação-resposta construída em cima de TCP / IP. TCP / IP cria uma abstração de conexão no topo do protocolo IP orientada para o pacote. IP é apenas capaz de entregar mensagens de uma máquina para outra. Através da construção de todos esses níveis de abstrações que se esqueceu
  • 2. de que web é realmente assíncrona. Acreditamos que, usando JSON frouxa contrato-menos não somos mais acoplar sistemas juntos. Mas há uma outra dimensão do acoplamento: a dependência temporal. Se um sistema precisa notificar outra sobre algum evento, será que eles realmente precisam existir ao mesmo tempo. Em alguns casos, normalmente implementado com GET, solicitação-resposta faz sentido. Mas na maioria dos casos o que realmente queremos é um fogo-e-esqueça, em situação de menos uma vez a semântica. arquiteturas distribuídas controlados por mensagem provou ser muito mais robusto e tolerante a falhas. Dois sistemas já não precisam de ver uns aos outros e viver ao mesmo tempo. Além disso, um sistema deixará de quebrar outro se ele está produzindo muitas solicitações. Basta colocar uma fila persistente entre dois sistemas. Esta abordagem tem várias vantagens: • produtores e consumidores pode ser reiniciado a qualquer momento sem perda de dados ou a qualidade do serviço degradado • escalabilidade é mais fácil de conseguir, não há necessidade de balanceamento de carga complexa • podemos enviar mensagens para múltiplos sistemas de uma só vez • depuração pode ser mais fácil com padrão tap fio RESTful também não tem noção de pedidos de sentido único. POST sem corpo é tão perto quanto você pode obter. Isso é problemático, porque muitos casos de negócios são naturalmente ajustando o fogo-e-esqueça semântica. Quando estou publicando eventos de domínio Eu não me importo sobre a resposta, mas os serviços REST são muito intimamente ligado com o protocolo HTTP. Somente interações de solicitação-resposta típico (como a recuperação de um usuário por ID) não são um bom ajuste para as filas embora. filas temporais com IDs de correlação são desajeitados e introduzir uma grande quantidade de latência.
  • 3. Sem padrões Não existem normas, mas apenas boas práticas, por vezes, contraditórias. Nós não podemos até concordar se os recursos devem estar no singular ou no plural, para não mencionar parâmetros de paginação, tratamento de erros, HATEOAS ... Você vai encontrar pessoas discutindo como RESTful é o seu serviço, de acordo com Richardson Modelo de Maturidade. Falta de normas significa que todo mundo pode nomear seu serviço RESTful. Pode ser um exemplo vivo de dissertação de Roy Fielding, que poderia ser um <form> manipulador POST - contanto que eles usam HTTP, eles são REST. Isto também significa que você nunca agora como interagir adequadamente com qualquer API. Que cabeçalhos você deve usar, como decodificar a resposta, como o conteúdo tipo é negociado (cabeçalhos? Extensão no URL?) E quais tipos são suportados. Compatibilidade com versões anteriores serviços RESTful têm poucas formas imperfeitas de manipulação de compatibilidade com versões anteriores: • única adição de campos, não remover ou alterar. Eu testemunhei uma situação onde alguém fixa um erro de digitação inocente em um objeto que passou a ser codificado diretamente como JSON. Este caiu outro sistema • Tipo de conteúdo com controle de versão - dolorosa e requer a manutenção de várias versões • HTTP redireciona se os recursos são renomeados - só funciona se os clientes são RESTful suficiente, evitando URLs codificadas inteiramente Cada técnica acima tem seus próprios problemas, serviços RESTful simplesmente não são projetados para ser em evolução. Alternativas
  • 4. Algumas perguntas que eu quero que você pergunte a si mesmo antes de saltar para JSON sobre HTTP RESTO hippie-estilo a.k.a. da integração: • é o desempenho é uma preocupação? Em seguida, escolher o formato mais compacto que não requer compressão caro • Você realmente precisa de bloqueio de solicitação-resposta? Se não, considere fila de mensagens ou loja, como Kafka • está fazendo a implantação contínua ou auto-scaling? Em seguida, escolher a tecnologia que faz cliente não par eo servidor temporariamente e é sem conexão, veja acima • são as suas interacções complexas ou talvez você está extraindo API existente / interface a partir do módulo de serviço distribuído? Em seguida, escolher a tecnologia mais perto de RPC clássico • você precisa semântica exatamente-uma vez? Se assim for, nada vai ajudá-lo, desculpe.