Cómo migrar de Pricing API v1 a Pricing API v2
Visión general
Esta guía explica cómo migrar de la API de precios v1 a la API de precios v2. La nueva versión de la API de precios incluye cambios en la autenticación, las rutas y las estructuras de respuesta. En esta guía se describen los cambios que debes realizar en tu aplicación para que puedas actualizar tu integración.
Es importante migrar a la API de precios v2 para aprovechar la mayor coherencia, seguridad y flexibilidad que ofrece la nueva API.
Antes de empezar
Antes de iniciar la migración, asegúrate de que:
- Tienes tu clave y secreto de API de Vonage.
- Ha revisado esta documentación para comprender las nuevas funciones y capacidades.
- Dispones de un entorno de pruebas o de desarrollo para probar los cambios antes de implementarlos en producción.
Tenga en cuenta el cambio de URL
La API de precios v2 utiliza una nueva URL base para la API en comparación con la v1.
-
En su aplicación, cambie la URL base y la ruta de
https://rest.nexmo.com/account/get-pricing/outbound/ahttps://api.nexmo.com/v2/account/pricing/Copia// Example using the old route const apiKey = 'vonage_api_key'; // Replace with your API Key const apiSecret = 'vonage_api_secret'; // Replace with your API Secret const product = 'sms'; // Example product const country = 'CA'; // Example country code const url = `https://rest.nexmo.com/account/get-pricing/outbound/${product}?api_key=${apiKey}&api_secret=${apiSecret}&country=${country}`;Copia// Example using the new route const apiKey = 'vonage_api_key'; // Replace with your API Key const apiSecret = 'vonage_api_secret'; // Replace with your API Secret const product = 'sms-outbound'; // Example product const country = 'CA'; // Example country code const url = `https://api.nexmo.com/v2/account/pricing/${product}`
Seleccione el producto adecuado
La Pricing API v2 sólo admite sms-outbound y voice-outbounden comparación con la Pricing API v1, que admitía sms, sms-transity voice. Tendrás que asegurarte de utilizar el nombre correcto del producto, ya que este puede variar. En la mayoría de los casos sms-transit y sms puede cambiarse a sms-outboundy voice puede cambiarse a voice-outbound.
Migrar a la autenticación mediante encabezado básico
La Pricing API v1 utilizaba la autenticación de parámetros de consulta para validar su solicitud, y la Pricing API v2 utiliza ahora la autenticación básica mediante el parámetro Authorization de cabeza.
-
Encuentre la solicitud de API en su aplicación actual. Si estás usando Node.js, tus peticiones pueden tener el siguiente aspecto:
Copiaconst fetch = require('node-fetch'); const apiKey = 'vonage_api_key'; // Replace with your API Key const apiSecret = 'vonage_api_secret'; // Replace with your API Secret const product = 'sms'; // Example product const country = 'CA'; // Example country code const url = `https://rest.nexmo.com/account/get-pricing/outbound/${product}?api_key=${apiKey}&api_secret=${apiSecret}&country=${country}`; fetch(url) .then(response => { if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } return response.json(); }) .then(data => { console.log('Pricing Data:', data); }) .catch(error => { console.error('Error fetching pricing data:', error); });Copiaconst axios = require('axios'); const apiKey = 'vonage_api_key'; // Replace with your API Key const apiSecret = 'vonage_api_secret'; // Replace with your API Secret const product = 'sms-outbound'; // Example product const country = 'CA'; // Example country code const url = `https://rest.nexmo.com/account/get-pricing/outbound/sms`; axios .get(url, { params: { api_key: apiKey, api_secret: apiSecret, country: country, }, }) .then(response => { console.log('Pricing Data:', response.data); }) .catch(error => { console.error('Error fetching pricing data:', error.response ? error.response.data : error.message); }); -
Retire el
api_keyyapi_secretparámetros y sustituirlos por unAuthenticationque utiliza la autenticación básica.Copia// Example using Node Fetch const fetch = require('node-fetch'); const apiKey = 'vonage_api_key'; // Replace with your API Key const apiSecret = 'vonage_api_secret'; // Replace with your API Secret const product = 'sms-outbound'; // Example product const country = 'CA'; // Example country code const url = `https://api.nexmo.com/v2/account/pricing/${product}?country=${country}`; fetch(url, { method: 'GET', headers: { Authorization: `Basic ${Buffer.from(`${apiKey}:${apiSecret}`).toString('base64')}`, }, }) .then(response => { if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } return response.json(); }) .then(data => { console.log('Pricing Data:', data); }) .catch(error => { console.error('Error fetching pricing data:', error); });Copia// Example using Axios const axios = require('axios'); const apiKey = 'vonage_api_key'; // Replace with your API Key const apiSecret = 'vonage_api_secret'; // Replace with your API Secret const product = 'sms-outbound'; // Example product const country = 'CA'; // Example country code const url = `https://api.nexmo.com/v2/account/pricing/${product}`; axios .get(url, { auth: { username: username, password: password, }, params: { country: country, }, }) .then(response => { console.log('Pricing Data:', response.data); }) .catch(error => { console.error('Error fetching pricing data:', error.response ? error.response.data : error.message); });
Cambio para procesar la nueva estructura de respuesta
La Pricing API v2 utiliza ahora un JSON-HAL estructura de respuesta para que sea más coherente con otras API de Vonage. Se trata de una estructura de respuesta de la API diferente a la estructura más «plana» de la API de precios v1, pero ofrece algunas ventajas adicionales, como una mejor paginación de los resultados.
-
Fíjate en el cambio en la ubicación de los datos en la respuesta. La información sobre precios y red se encuentra ahora en el
_embedded.countriesmatriz en lugar de lanetworksmatriz.Copia// Pricing API v1 Response { "countryCode": "CA", "countryName": "Canada", "countryDisplayName": "Canada", "currency": "EUR", "defaultPrice": "0.00620000", "dialingPrefix": "1", "networks": [ { "type": "mobile", "price": "0.00590000", "currency": "EUR", "mcc": "302", "mnc": "530", "networkCode": "302530", "networkName": "Keewaytinook Okimakanak" } ] }Copia// Pricing API v2 Response { "page_size": "100", "page": "1", "total_items": "243", "total_pages": "3", "_embedded": { "countries": [ { "country_name": "Canada", "dialing_prefix": "1", "dest_network_type": "ALL", "group_internal_start": "1s", "rate_increment": "60", "currency": "USD", "price": "0.1" } ] }, "_links": { "self": { "href": "https://api.nexmo.com/account/pricing/sms-outbound?page=1&page_size=100" }, "first": { "href": "https://api.nexmo.com/account/pricing/sms-outbound?page=1&page_size=100" }, "last": { "href": "https://api.nexmo.com/account/pricing/sms-outbound?page=3&page_size=100" }, "next": { "href": "https://api.nexmo.com/account/pricing/sms-outbound?page=2&page_size=100" }, "prev": { "href": "https://api.nexmo.com/account/pricing/sms-outbound?page=1&page_size=100" } } } -
Fíjate en los cambios en los nombres de las claves. Ahora los nombres de las claves utilizan
snake_caseen lugar decamelCase. Esto cumple con los estándares de API de Vonage y mantiene la coherencia con nuestras otras respuestas de API. Algunas ubicaciones de las claves también han cambiado.
countryCodeahora aparece en la URL como elcountryparámetro de consulta.countryNamese encuentra ahora en_embedded.countries[X].country_name.countryDisplayNamese encuentra ahora en_embedded.countries[X].country_name.currencyse encuentra ahora en_embedded.countries[X].currency.defaultPricese encuentra ahora en_embedded.countries[X].price.dialingPrefixse encuentra ahora en_embedded.countries[X].dialing_prefix.network[X].typeya no se devuelve.network[X].pricese encuentra ahora en_embedded.countries[X].price.network[X].currencyse encuentra ahora en_embedded.countries[X].currency.network[X].mccya no se devuelve.network[X].mncya no se devuelve.network[X].networkCodeya no se devuelve.network[X].networkNameya no se devuelve.
- Ahora la respuesta refleja con mayor precisión el paginado. Puedes comparar el
pageclave con eltotal_pagespara ver si está al final de los resultados, o compruebe la existencia de la tecla_links.nexttecla . Si necesita pasar a la página siguiente, puede utilizar la tecla_links.next.hrefvalor para determinar automáticamente la página siguiente y pasar a ella.