Cómo migrar de Pricing API v1 a Pricing API v2
Visión general
Esta guía explica cómo migrar de la Pricing API v1 a la Pricing API v2. La nueva versión de la Pricing API incluye cambios en la autenticación, las rutas y las estructuras de respuesta. Esta guía documentará los cambios que debe realizar en su aplicación para poder actualizar su integración.
Es importante migrar a la Pricing API v2 para aprovechar la mayor coherencia, seguridad y flexibilidad que ofrece la nueva API.
Antes de empezar
Antes de iniciar la migración, asegúrese de que:
- Tienes tu clave y secreto de API de Vonage.
- Ha revisado esta documentación para comprender las nuevas funciones y capacidades.
- Dispone de un entorno de pruebas o desarrollo para probar los cambios antes de implantarlos en producción.
Tenga en cuenta el cambio de URL
La Pricing API 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/// 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}`;// 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. Deberá asegurarse de llamar al nombre del producto adecuado, ya que éste cambiará. 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 de 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:
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'; // 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); });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://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_secrety sustituirlos por unAuthenticationque utiliza la autenticación básica.// 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); });// 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 para que sea más coherente con otras API de Vonage. Esta es una estructura de respuesta de API diferente a la estructura de respuesta más plana de la API de precios v1, pero brinda algunos beneficios adicionales como una mejor paginación de los resultados.
Observe el cambio de ubicación de los datos en la respuesta. La información sobre precios y redes se encuentra ahora en la sección
_embedded.countriesen lugar de la matriznetworksmatriz.// 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" } ] }// 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" } } }Observe los cambios en los nombres de las teclas. Los nombres de las teclas utilizan ahora
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.
countryCodese encuentra ahora en la URL comocountrypará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.
- La respuesta refleja ahora con mayor precisión la paginación. Puede comparar la
pagecon la teclatotal_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.hrefpara determinar y navegar automáticamente a la página siguiente.