https://d226lax1qjow5r.cloudfront.net/blog/blogposts/announcing-python-sdk-version-v3/python_sdk_updates.png

Ya está disponible la versión 3.0.0 del SDK Python de Vonage.

Publicado el August 8, 2022

Tiempo de lectura: 7 minutos

Tl;dr: Ya está disponible la versión 3.0.0 del SDK de Python¡! La mayor parte del PR es refactorización interna para sentar las bases para futuras mejoras, pero también añadimos algunas nuevas características para ayudarle a sacar el máximo provecho de la utilización del SDK.

Desde que (Max) se unió a Vonage hace 4 meses, he pasado una cantidad significativa de tiempo refactorización Vonage's SDK Python de Vonage. En esta versión, me centré en mejoras para reducir la deuda técnica y aumentar la legibilidad. Como resultado, los cambios realizados en la versión v3.0.0 en su mayoría sientan las bases para que nuevas características interesantes se puedan añadir más adelante.

En este post, explicaré algunos de los cambios que hice para la v3.0.0, y cuál fue la motivación de cada uno de ellos.

Panorama general

El principal cambio estructural ha sido organizar los métodos de cada API en clases y módulos separados. Así queda más claro a qué API se está llamando, además de permitirnos establecer el tipo de autenticación para cada API cuando se realiza una solicitud a través del SDK.

También había mucha duplicación. Por ejemplo, había cinco métodos distintos, en 3 archivos diferentes, para hacer la misma petición POST básica con un par de variaciones. He consolidado todos estos métodos en una sola función que hace una llamada REST con el paquete requests teniendo en cuenta los diferentes métodos de autenticación y los tipos de cuerpo esperados por cada API.

La principal diferencia entre la v2 y la v3 es que se ha eliminado mucho código obsoleto, por lo que hay una serie de cambios de última hora. Todos los Client métodos de clase que en realidad estaban llamando a una API específica fueron eliminados, ya que ahora se accede a ellos desde el módulo específico para esa API. También había algunos métodos que deberían haber sido obsoletos y eliminados hace mucho tiempo, o que nunca se añadieron, y que ahora hemos obviado y eliminaremos en una versión posterior.

Agregamos parámetros opcionales a la clase Client para que puedas personalizar las opciones de tiempo de espera, reintentos y agrupación para toda la sesión con un cliente de Vonage. También hemos añadido un par de mejoras a la API de precios, con un nuevo método y la posibilidad de realizar consultas basadas en el tráfico de SMS o de voz.

Echemos un vistazo.

Consiga la nueva versión

Para descargar la nueva versión v3.0.0, ejecute este comando (puede hacerlo en un entorno virtual):

python3 -m pip install --upgrade vonage

Esto descargará la nueva versión desde cero, o actualizará una versión existente del SDK a la última versión.

Una nota rápida

En versiones anteriores, añadí una clase Messages y cambié la forma de llamar a los métodos. Por ejemplo, para enviar un SMS, antes había que hacer lo siguiente:

client = vonage.Client(key='my_key', secret='my_secret')
sms = vonage.Sms(client)
sms.send_message([message_details_go_here])

Mientras que ahora puede hacerlo para todas las llamadas a la API:

client = vonage.Client(key='my_key', secret='my_secret')
client.sms.send_message([message_details_go_here])

Mis ejemplos en este post seguirán este último patrón.

Nuevas clases

Inicialmente, todo el código estaba en una sola Client clase. Es decir, cada método, para cada tipo de petición que se puede hacer con el SDK. Hace un par de años, se inició una refactorización para modularizar estas peticiones en clases basadas en las API a las que llaman: Voice, Sms, Verify etc. Este refactor nunca se completó, así que en los últimos meses he obsoleto los métodos de la clase Client y añadí nuevos módulos como number_insight, messages, accountetc. Ahora, los métodos relacionados con una API específica son llamados desde ese módulo en particular.

Por ejemplo, para hacer una solicitud básica de visión de números, ahora puede hacer lo siguiente:

client = vonage.Client(key='my_key', secret='my_secret')
client.number_insight.get_basic_number_insight(number=MY_NUMBER)

Así que ahora el código está modularizado, pero se puede acceder a todo desde una única clase cliente. V3.0.0 elimina los métodos que estaban originalmente en la clase Client por lo que ahora deben llamarse como se ha descrito anteriormente.

Nuevas opciones de conexión de clientes

Al instanciar un objeto Client ahora puede especificar el parámetro opcional max_retries, timeout, pool_connections y pool_maxsize que se utilizarán en todas las peticiones que se realicen con ese objeto. Client objeto. Las opciones se pueden especificar de esta forma:

client = vonage.client(
key='my_key',
secret='my_secret',
timeout=10,  # timeout in seconds
pool_connections=10,
pool_maxsize=10,
max_retries=5
)

Estas opciones son útiles si envías muchas solicitudes a la vez o quieres permitir que las solicitudes agoten el tiempo de espera y se vuelvan a intentar.

Por defecto, la petición no caduca, pero se puede especificar cualquier valor en segundos. El número máximo de reintentos por defecto es 3, pero cualquier valor entero es válido. Del mismo modo, puede especificar cualquier valor entero para el número de conexiones y el tamaño máximo del grupo (aunque ambos tienen un valor predeterminado de 10).

Nuevos argumentos de palabras clave de precios en las llamadas a la API de precios

Ahora es posible especificar si desea ver los precios de SMS o de voz en las llamadas a la API de precios. SMS es el valor predeterminado y los precios de Voice se pueden solicitar así:

client.account.get_country_pricing(country_code='GB', type='voice')

Añadido un método para obtener los precios de todos los países

Hemos añadido un método get_all_countries_pricing a la clase Account clase. Esto le permite ver los precios para todos los países soportados para SMS o Voice.

client.account.get_all_countries_pricing() # returns sms pricing for all countries
client.account.get_all_countries_pricing(type='voice') # returns voice pricing for all countries

Eliminados los métodos de la API de búsqueda de mensajes

Vonage eliminó la API de búsqueda de mensajes, por lo que he eliminado los métodos que la llaman. Ver este aviso de especificación de la API para obtener más información.

Vonage recomienda migrar todas las llamadas a Reports API. Como se trata de una función beta, no es compatible con el SDK de Python, pero esta guía explica cómo migrar a la Reports API.

Eliminada la creación automática de clientes

Anteriormente, era posible instanciar una clase API (p. ej. Sms) directamente, introduciendo las credenciales, ya que al hacerlo se creaba un cliente. Esto se ha eliminado, ya que queremos que todo el mundo utilice las clases creando un cliente y usándolo para llamar a los métodos de la API.

Eliminados métodos obsoletos de las clases Voice y NumberInsight

La clase Voice contiene métodos (initiate_call, initiate_tts_call y initiate_tts_prompt_call) que exponían puntos finales que Vonage dejó obsoletos en 2017. Ahora se han eliminado del SDK. Del mismo modo, el método request_number_insight ya que fue reemplazado por los métodos y puntos finales get_{basic/standard/advanced}_number_insight y los puntos finales.

Renombrar un método secreto

El método Account.delete_secret ha pasado a llamarse revoke_secret para ajustarlo a la documentación. No hay mucho que decir aquí, había un simple desajuste que ya hemos corregido.

Depreciaciones

Hemos obsoleto la clase ApplicationV2 y hemos creado una clase Application para armonizar la nomenclatura con otros métodos. El cambio es sencillo:

ApplicationV2.list_applications() # Old class
Application.list_applications() # New class

Dos antiguos métodos de la API de precios (get_sms_pricing y get_voice_pricing) han quedado obsoletos porque llaman a puntos finales obsoletos.

Por último, el método que llama a Redact API (redact_transaction) ha sido obsoleto ya que es un producto de desarrollo preliminar que no es compatible con los SDK del servidor de Vonage.

Todos ellos se eliminarán en una versión posterior.

Actualización desde 2.x

Si está actualizando de v2.x a la nueva versión, asegúrese de que si está utilizando algún método API directamente desde la clase cliente, utilice en su lugar los métodos de la clase API correspondiente.

Por ejemplo

client.get_basic_number_insight(number=MY_NUMBER) # API methods have been removed from the client class - this won't work
client.number_insight.get_basic_number_insight(number=MY_NUMBER) # Call the methods using the relevant API classes instead

¿Adónde vamos?

Como puedes ver, hemos hecho bastantes cambios en la forma de llamar a las APIs en esta versión. En futuras versiones, añadiremos funcionalidad de Video al SDK. También planeamos eliminar los métodos obsoletos, añadir soporte para asyncio y eventualmente hacer más para validar la entrada, utilizando una herramienta como Pydantic.

No dudes en descargar la nueva versión y decirnos qué te parece. Si hay algo más que quieras ver, o algo con lo que te gustaría contribuir, todo el SDK es de código abierto y en GitHub. Puedes comenzar hoy mismo con créditos gratuitos en el sitio web para desarrolladores de Vonage.

Compartir:

https://a.storyblok.com/f/270183/400x400/92109caf6a/max-kahan.png
Max KahanVonage Antiguo miembro del equipo

Max es un defensor de los desarrolladores de Python e ingeniero de software interesado en las API de comunicaciones, el aprendizaje automático, la experiencia de los desarrolladores y el baile. Su formación es en Física, pero ahora trabaja en proyectos de código abierto y hace cosas para mejorar la vida de los desarrolladores.