Flag of Ukraine
SymfonyCasts stands united with the people of Ukraine

Depuración de la API con el Perfilador

Keep on Learning!

If you liked what you've learned so far, dive in!
Subscribe to get access to this tutorial plus
video, code and script downloads.

Start your All-Access Pass
Buy just this tutorial for $12.00

With a Subscription, click any sentence in the script to jump to that part of the video!

Login Subscribe

Depurar una API... puede ser difícil... porque no ves los resultados -o los errores- como grandes páginas HTML. Así que, para ayudarnos en el camino, ¡vamos a nivelar nuestra capacidad de depuración! En una aplicación tradicional de Symfony, una de las mejores características es la barra de herramientas de depuración web... que ahora mismo no vemos aquí abajo porque aún no está instalada.

Utilizar el perfilador en una API

Pero... ¿deberíamos siquiera molestarnos? Quiero decir, no es que podamos ver la barra de herramientas de depuración web en una respuesta de la API JSON, ¿verdad? ¡Por supuesto que podemos! Bueno, más o menos.

Busca tu terminal y consigue instalar el perfilador con:

composer require profiler --dev

También puedes ejecutar composer require debug --dev para instalar algunas herramientas adicionales. Esto instala el WebProfilerBundle, que añade un par de archivos de configuración para ayudarle a hacer su magia.

Gracias a ellos, cuando actualizamos... ¡ahí está! La barra de herramientas de depuración web flotando en la parte inferior. Esto es literalmente la barra de herramientas de depuración web de esta página de documentación... que probablemente no sea tan interesante.

Pero si empezamos a hacer peticiones... compruébalo. Cuando ejecutamos una operación a través de Swagger, hace una petición AJAX para completar la operación. Y la barra de herramientas de depuración web de Symfony tiene una pequeña y genial función en la que rastrea esas peticiones AJAX y las añade a una lista Cada vez que pulso ejecutar, ¡obtengo una nueva!

¡La verdadera magia es que puedes hacer clic en el pequeño enlace "sha" para ver el perfil de esa petición de la API! Así que... ¡sí! No puedes ver la barra de herramientas de depuración de la web para una respuesta que devuelve JSON, pero sí puedes ver el perfil, que contiene muchos más datos de todos modos, como los parámetros POST, las cabeceras de la petición, el contenido de la petición -que es realmente importante cuando envías JSON- y todas las cosas buenas que esperas: caché, rendimiento, seguridad, Doctrine, etc.

Encontrar el perfil de una petición de API

Además del pequeño rastreador AJAX de la barra de herramientas de depuración web que acabamos de ver, hay algunas otras formas de encontrar el perfil para una petición específica de la API. En primer lugar, cada respuesta tiene una cabecera x-debug-token-link con una URL a su página de perfil, que puedes leer para saber a dónde ir. O bien, puedes ir a /_profilerpara ver una lista de las peticiones más recientes. Aquí está la de /api/cheese_listings. Haz clic en el token para saltar a su perfilador.

El panel de la Plataforma API

Ah, y la Plataforma API añade su propio panel del perfilador, que es una buena manera de ver en qué recurso operaba esta petición y los metadatos de la misma, incluyendo esta operación del elemento y la operación de recogida -hablaremos de ellas muy pronto-. También muestra información sobre los "proveedores de datos" y los "perseguidores de datos", dos conceptos importantes de los que hablaremos más adelante.

Pero antes de llegar ahí, de vuelta a la página de documentación, tenemos que hablar de estas cinco rutas -llamadas operaciones- y de cómo podemos personalizarlas.

Leave a comment!

2
Login or Register to join the conversation

Hi, any idea as to why a request to fetch an id takes around 2.4 seconds? Quite slow. Is it because I'm running Windows 10 or did I miss something? My other pure web SF4 projects run a request in less than 500ms on the same platform

Reply

Hey JP Fortuno

Are you on Windows WSL? Because it has a very poor performance with files operations.
Another thing to consider is the first time you execute a request Symfony has to bootstrap the entire app but it creates a cache, so, if you don't modify any file after that, the subsequent requests ought to be faster

Cheers!

Reply
Cat in space

"Houston: no signs of life"
Start the conversation!

Este tutorial funciona muy bien para Symfony 5 y la Plataforma API 2.5/2.6.

What PHP libraries does this tutorial use?

// composer.json
{
    "require": {
        "php": "^7.1.3",
        "ext-ctype": "*",
        "ext-iconv": "*",
        "api-platform/core": "^2.1", // v2.4.3
        "composer/package-versions-deprecated": "^1.11", // 1.11.99
        "doctrine/annotations": "^1.0", // 1.10.2
        "doctrine/doctrine-bundle": "^1.6", // 1.11.2
        "doctrine/doctrine-migrations-bundle": "^2.0", // v2.0.0
        "doctrine/orm": "^2.4.5", // v2.7.2
        "nelmio/cors-bundle": "^1.5", // 1.5.5
        "nesbot/carbon": "^2.17", // 2.19.2
        "phpdocumentor/reflection-docblock": "^3.0 || ^4.0", // 4.3.1
        "symfony/asset": "4.2.*|4.3.*|4.4.*", // v4.3.11
        "symfony/console": "4.2.*", // v4.2.12
        "symfony/dotenv": "4.2.*", // v4.2.12
        "symfony/expression-language": "4.2.*|4.3.*|4.4.*", // v4.3.11
        "symfony/flex": "^1.1", // v1.17.6
        "symfony/framework-bundle": "4.2.*", // v4.2.12
        "symfony/security-bundle": "4.2.*|4.3.*", // v4.3.3
        "symfony/twig-bundle": "4.2.*|4.3.*", // v4.2.12
        "symfony/validator": "4.2.*|4.3.*", // v4.3.11
        "symfony/yaml": "4.2.*" // v4.2.12
    },
    "require-dev": {
        "symfony/maker-bundle": "^1.11", // v1.11.6
        "symfony/stopwatch": "4.2.*|4.3.*", // v4.2.9
        "symfony/web-profiler-bundle": "4.2.*|4.3.*" // v4.2.9
    }
}