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.

  1. En su aplicación, cambie la URL base y la ruta de https://rest.nexmo.com/account/get-pricing/outbound/ a https://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.

  1. 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);
        });
    
  2. Retire el api_key y api_secret y sustituirlos por un Authentication que 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.

  1. 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.countries en lugar de la matriz networks matriz.

    // 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"
            }
        }
    }
    
  2. Observe los cambios en los nombres de las teclas. Los nombres de las teclas utilizan ahora snake_case en lugar de camelCase. 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.

  • countryCode se encuentra ahora en la URL como country parámetro de consulta.
  • countryName se encuentra ahora en _embedded.countries[X].country_name.
  • countryDisplayName se encuentra ahora en _embedded.countries[X].country_name.
  • currency se encuentra ahora en _embedded.countries[X].currency.
  • defaultPrice se encuentra ahora en _embedded.countries[X].price.
  • dialingPrefix se encuentra ahora en _embedded.countries[X].dialing_prefix.
  • network[X].type ya no se devuelve.
  • network[X].price se encuentra ahora en _embedded.countries[X].price.
  • network[X].currency se encuentra ahora en _embedded.countries[X].currency.
  • network[X].mcc ya no se devuelve.
  • network[X].mnc ya no se devuelve.
  • network[X].networkCode ya no se devuelve.
  • network[X].networkName ya no se devuelve.
  1. La respuesta refleja ahora con mayor precisión la paginación. Puede comparar la page con la tecla total_pages para ver si está al final de los resultados, o compruebe la existencia de la tecla _links.next tecla . Si necesita pasar a la página siguiente, puede utilizar la tecla _links.next.href para determinar y navegar automáticamente a la página siguiente.

Ver también