https://d226lax1qjow5r.cloudfront.net/blog/blogposts/announcing-the-vonage-php-server-sdk-version-3-0-release/php_sdk-updates.png

Anuncio de la versión 3.0 del SDK de servidor PHP de Vonage

Publicado el January 26, 2022

Tiempo de lectura: 4 minutos

Para los desarrolladores que han estado siguiendo la reciente hoja de ruta del SDK de servidor PHP de Vonageesta versión debería parecerse mucho a lo esperado. En nuestro anterior lanzamiento significativoel antiguo mantenedor Chris Tankersley explicó el objetivo de simplificar la biblioteca, y yo he continuado ese trabajo.

Sin embargo, esta versión principal tiene en cuenta un cambio de equipo y, por tanto, de propiedad del SDK y, por tanto, no elimina cada depreciaciones. Llegar de cero a estas bibliotecas plantea varios retos, como comprender los enfoques adoptados anteriormente y satisfacer las necesidades de nuestros desarrolladores en lo que respecta a la evolución del SDK. Algunos de los comportamientos más complejos "bajo el capó" se han dejado tal cual, con los avisos todavía presentes. Se eliminarán, pero más adelante.

Cambios importantes

Soporte PHP

A partir de esta versión, la biblioteca seguirá el ciclo de vida del lenguaje PHP. Como tal, PHP8.1 es ahora compatible, y el apoyo a las versiones 7.2 y 7.3 se han eliminado.

Estrategia de ramificación

Aunque la mayoría de los usuarios finales no se verán afectados por este cambio, altera significativamente la estructura del repositorio para aquellos que deseen contribuir a esta biblioteca de código abierto. El nuevo flujo de trabajo, diseñado para alinearse con otros SDK del servidor de Vonagetiene el siguiente aspecto:

  • main (renombrada a partir de ramas de versión como 3.X/2.X)

  • dev rama

  • Los pull requests se quitan mainy se fusionan en dev como objetivo

  • fusiona de dev a main se consideran fusiones de lanzamiento, y por lo tanto resultarán en una etiqueta git que se empujará a Packagist.

Eliminación del acceso a la matriz

El mayor cambio en el código de la biblioteca es que se han eliminado casi todos los accesores a arrays, que estaban marcados como obsoletos. Anteriormente todas las entidades usaban la interfaz ArrayAccess para implementar varias funciones básicas de PHP como offsetExists() y offsetSet($offset, value). Esto causaba una complejidad innecesaria, especialmente porque algunas entidades realmente proxyaban el valor en un objeto request objeto.

Ahora que se han eliminado, se utilizan getters y setters en su lugar. Por ejemplo:

Anterior

$balance = new Vonage\Account\Balance('12.99', false);
$balanceValue = $balance['balance']

Nuevo

$balance = new Vonage\Account\Balance('12.99', false);
$balanceValue = $balance->getBalance();

Si faltan getters o setters, puedes añadir algo de código extra para hacer tu código compatible con versiones anteriores - todas las entidades implementan el método ArrayHydrateInterface. Esto significa que puedes seguir accediendo a los objetos como matrices que se convierten en nuevas variables utilizando las etiquetas toArray() y fromArray() a nuevas variables. Por ejemplo:

// this will error
$balance = new Vonage\Account\Balance('12.99', false);
$balanceValue = $balance['balance']

// this will fix it
$balance = new Vonage\Account\Balance('12.99', false);
$balanceArray = $balance->toArray();
$balanceValue = $balanceArray['balance']

Eliminación dejsonSerialize yjsonUnserialize

Casi todas las entidades utilizaron también el jsonSerialize y jsonUnserialize . La mayoría de ellas se han eliminado, ya que la idea original de poder personalizar qué estructuras de datos se serializan y se deserializan no es necesaria. Para deserializar un objeto, se utilizan los métodos ArrayHydrateInterface en su lugar.

Eliminación deCall módulo

El cliente Vonage\Call cliente ya estaba marcado para ser eliminado, por lo que esto ya ha sucedido. Esta funcionalidad ha sido sustituida por el Vonage\Voice y sus entidades asociadas, cuyo uso ya está documentado con ejemplos en el Léame.

He aquí un "ejemplo del antes y el después" de su uso:

// old
$call = new Vonage\Call\Call();
$call->setTo('14843331234')
     ->setFrom('14843335555')
     ->setWebhook(Vonage\Call\Call::WEBHOOK_ANSWER, 'https://example.com/answer')
     ->setWebhook(Vonage\Call\Call::WEBHOOK_EVENT, 'https://example.com/event');

$client->call()->create($call);

// new
$outboundCall = new \Vonage\Voice\OutboundCall(  
    new \Vonage\Voice\Endpoint\Phone('14843331234'),  
    new \Vonage\Voice\Endpoint\Phone('14843335555')  
);  

$outboundCall  
    ->setAnswerWebhook(  
        new \Vonage\Voice\Webhook('https://example.com/answer')  
    )  
    ->setEventWebhook(  
        new \Vonage\Voice\Webhook('https://example.com/event')  
    )  
;  
  
$response = $client->voice()->createOutboundCall($outboundCall);

Eliminación deUser módulo

La biblioteca tenía originalmente una implementación incompleta de una característica que estaba en la fase beta del ciclo de lanzamiento. Esta característica ha sido eliminada, y por lo tanto la biblioteca ha dejado de soportarla. No hay ninguna funcionalidad alternativa para reemplazarla si se ha utilizado, pero como estaba incompleta y marcada para su eliminación no debería haber ningún impacto en términos de uso del SDK.

Cambios menores

Estos son cambios que están muy "bajo el capó", detrás de la capa de servicio de la biblioteca que está diseñada para ser orientada al desarrollador. Por transparencia, voy a documentar algunos de estos cambios.

Eliminación de pruebas incompletas y omitidas

Varias pruebas se marcaron como incompletas u omitidas, con razones dadas. Dado el cambio de mantenedor, y que se pierde algo de contexto histórico/conocimiento del dominio cuando el código cambia de manos, he tomado la decisión de limpiar el código borrándolas. Hay dos justificaciones para esto:

  1. El código que se está probando podría haber cambiado de contexto o de estado, es decir, una función que ahora se comporta de forma diferente en nuestras API.

  2. Tenemos el objetivo de aumentar la cobertura del código hasta casi el 100% este año, por lo que no se omitirá nada que estas pruebas se hubieran propuesto cubrir.

Compatibilidad con PSR/Container 2.0

Para los frameworks PHP modernos y de publicación continua, como Laravel y Symfony, se ha añadido soporte PSR-11 para la v2.0 del contenedor de servicios sin ningún impacto.

Basic::getCountryPrefix() valor de retorno

Anteriormente, este método devolvía un número entero. Este valor se almacena como una cadena de la respuesta de la API hecha para rellenarlo, y posiblemente podría contener caracteres especiales. Por ello, se ha cambiado para que devuelva una cadena.

Cambios en KeyPair

El objeto Vonage\Client\Credentials\Keypair() objeto tiene un nuevo método getKey()para obtener el key. Esto se añadió para soportar algunas pruebas adicionales de la funcionalidad JWT.

psr/log soporte

Similar a la versión de soporte bump para el contenedor, psr/log ahora se admite la versión 2.0.

Cambio enApplication\Client comportamiento

Al crear un objeto Application\Clientexiste un shim para compatibilidad con versiones anteriores que permite crear el objeto sin un objeto implementable HydratorInterface implementable. Este calce se ha eliminado.

Gracias por su apoyo.

Mi agradecimiento a Daniel Miedzik, usuario de Github iceleo-comy Fabien Salathe por sus contribuciones a esta versión. Habrá cambios notables, algunos de los cuales ya hemos empezado a aplicar, en lo que respecta al mantenimiento de esta biblioteca, como mantener la lista de problemas documentada con el etiquetado adecuado y acelerar los tiempos de respuesta. Nuestro objetivo también es pasar a versiones más regulares, en línea con un enfoque más "CI".

Cuando hayamos eliminado las últimas desaprobaciones marcadas en una versión futura, vamos a tomar medidas para simplificar aún más la biblioteca para fomentar las contribuciones de fuera de Vonage. Después de todo, ¡nuestras bibliotecas son de código abierto!

Compartir:

https://a.storyblok.com/f/270183/400x385/12b3020c69/james-seconde.png
James SecondePromotor senior de desarrollo PHP

Actor de formación con una disertación sobre la comedia, llegué al desarrollo de PHP a través de la escena de las reuniones. Puedes encontrarme hablando y escribiendo sobre tecnología, o tocando/comprando discos raros de mi colección de vinilos.