Back-End

6 fev, 2017

Quantas implementações do PSR-7 existem?

Publicidade

Mais especificamente, quantas implementações do PSR-7 ServerRequestInterface existem?

Inicialmente, parece que a resposta pode ser de até três dúzias.

Mas cada vez mais parece que a resposta real, para uma primeira aproximação, é “zero”.

Para implementar ServerRequestInterface, os métodos withAttribute() e withParsedBody() devem manter a imutabilidade do objeto de mensagem. No entanto, nenhuma das implementações existentes faz isso.

Para ver por si mesmo, clone meu repositório PSR-7 Immutability Testing e execute os testes, que cobrem as três implementações PSR-7 mais populares.

A imutabilidade é muito difícil de implementar – pelo menos, não sem algumas restrições graves, nenhuma das quais são especificadas pelo PSR-7 ServerRequestInterface. Quanto mais eu trabalho com ele, mais eu começo a pensar que não é totalmente implementável como especificado em primeiro lugar.

UPDATE: Aparentemente eu estava fazendo algo quando sugeri que o PSR-7 não pode ser implementado como escrito. Sara Golemon (que esqueceu mais sobre os internos do PHP do que eu jamais vou saber) aponta: “Não é tecnicamente implementável. E assim você está tecnicamente correto, o melhor tipo de correto.” (Arquivado para a posteridade em https://archive.is/BnkGb.)

UPDATE 2: comentaristas do Reddit salientam que o método ServerRequestInterface::getAttributes() afirma “Atributos serão específicos para aplicações e pedidos e PODEM ser mutáveis.” Isso parece em desacordo com o método withAttribute (), que exige que o objeto permaneça imutável. Na melhor das hipóteses, isso parece uma supervisão na especificação e, na pior das hipóteses, é uma contradição interna.

 

***

Paul M. Jones faz parte do time de colunistas internacionais do iMasters. A tradução do artigo é feita pela redação iMasters, com autorização do autor, e você pode acompanhar o artigo em inglês no link: http://paul-m-jones.com/archives/6510