PSR-13 – enlaces hipermedia en PHP 7

Los enlaces hipermedia forman una parte esencial de cualquier aplicación web, ya sea que estemos hablando de formatos HTML o API. Como mínimo, cada enlace hipermedia consiste en un URI que representa el recurso objetivo y una relación que define cómo se relaciona el recurso objetivo con la fuente.

El enlace de destino debe ser un URI absoluto o un URI relativo, como se define en RFC 5988, o posiblemente una plantilla de URI como se define en RFC 6570.
El estándar PSR-13 define una serie de interfaces que describen un formato hipermedia común y una forma de representar enlaces entre estos formatos:

  • Psr\Link\LinkInterface
  • Psr\Link\EvolvableLinkInterface
  • Psr\Link\LinkProviderInterface
  • Psr\Link\EvolvableLinkProviderInterface

Estas interfaces se pueden obtener a través de Composer como parte del paquete psr/link.

El siguiente fragmento de código refleja la definición PSR-13 Psr\Link\LinkInterface, que representa un único objeto de enlace legible:

<?php
namespace Psr\Link;
interface LinkInterface
{
public function getHref();
public function isTemplated();
public function getRels();
public function getAttributes();
}

El siguiente fragmento de código refleja la definición PSR-13 Psr\Link\LinkProviderInterface, que representa un único objeto proveedor de enlaces:

<?php
namespace Psr\Link;
interface LinkProviderInterface
{
public function getLinks();
public function getLinksByRel($rel);
}

El siguiente fragmento de código refleja la definición PSR-13 Psr\Link\EvolvableLinkInterface, que representa un único objeto de valor de enlace evolutivo:

<?php
namespace Psr\Link;
interface EvolvableLinkInterface extends LinkInterface
{
public function withHref($href);
public function withRel($rel);
public function withoutRel($rel);
public function withAttribute($attribute, $value);
public function withoutAttribute($attribute);
}

El siguiente fragmento de código refleja la definición de PSR-13 Psr\Link\EvolvableLinkProviderInterface, que representa un único objeto de valor de proveedor de enlace evolutivo:

<?php
namespace Psr\Link;
interface EvolvableLinkProviderInterface extends LinkProviderInterface
{
public function withLink(LinkInterface $link);
public function withoutLink(LinkInterface $link);
}

Aquí significa que las instancias de objeto de estas interfaces exhiben el mismo comportamiento que las del PSR-7. Por defecto, los objetos deben ser inmutables. En el momento en que un estado de objeto necesita cambiar, ese cambio debe reflejarse en una nueva instancia de objeto. Gracias al PHP’s copyon- write behavior, esto es fácil de implementar para la clase.
El copy-on-write behavior es un mecanismo incorporado del código PHP, mientras que PHP se encarga de evitar duplicados innecesarios de variables. Hasta que se cambien uno o más bytes de variable, la variable no se copiará.
La guía oficial de PSR-13: Enlaces Hypermedia está disponible en http://www.php-fig.org/psr/psr-13/.

Comparte