{"id":26571,"date":"2020-07-01T00:00:00","date_gmt":"2020-06-30T22:00:00","guid":{"rendered":"https:\/\/blexin.com\/?p=26571"},"modified":"2021-01-13T09:40:01","modified_gmt":"2021-01-13T08:40:01","slug":"testiamo-la-nostra-api-con-graphql-e-hot-chocolate","status":"publish","type":"post","link":"https:\/\/blexin.com\/it\/blog\/testiamo-la-nostra-api-con-graphql-e-hot-chocolate\/","title":{"rendered":"Testiamo la nostra API con GraphQL e Hot Chocolate"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"608\" data-attachment-id=\"26573\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/testiamo-la-nostra-api-con-graphql-e-hot-chocolate\/attachment\/f05eb91a-2779-4926-9141-5f41a88a81d3\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/f05eb91a-2779-4926-9141-5f41a88a81d3.png?fit=1024%2C608&amp;ssl=1\" data-orig-size=\"1024,608\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"f05eb91a-2779-4926-9141-5f41a88a81d3\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/f05eb91a-2779-4926-9141-5f41a88a81d3.png?fit=1024%2C608&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/f05eb91a-2779-4926-9141-5f41a88a81d3.png?resize=1024%2C608&#038;ssl=1\" alt=\"\" class=\"wp-image-26573\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/f05eb91a-2779-4926-9141-5f41a88a81d3.png 1024w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/f05eb91a-2779-4926-9141-5f41a88a81d3-980x582.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/f05eb91a-2779-4926-9141-5f41a88a81d3-480x285.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Nel&nbsp;<a href=\"https:\/\/www.blexin.com\/it-IT\/Article\/Blog\/Creiamo-la-nostra-API-con-GraphQL-e-Hot-Chocolate-79\" target=\"_blank\" rel=\"noreferrer noopener\">mio precedente articolo<\/a>, ho mostrato cos&#8217;\u00e8 GraphQL e come creare una API con HotChocolate. Partendo proprio dal codice che vi condivisi sul mio repo&nbsp;<a href=\"https:\/\/github.com\/AARNOLD87\/GraphQLWithHotChocolate\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/AARNOLD87\/GraphQLWithHotChocolate<\/a>&nbsp;vorrei mostrarvi come poter testare il progetto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Non si tratter\u00e0 di un test di unit\u00e0, perch\u00e9 non andremo a testare il service o il gateway, ma andremo a realizzare dei test di integrazione. Tali test serviranno per capire se l\u2019intero flusso, dall\u2019input alla risposta, sta funzionando correttamente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ho utilizzato questi test anche per essere sicuro che la mia API fornisse tutti i dati richiesti. \u00c8 vero che, con GraphQL, \u00e8 l\u2019utilizzatore a specificare quali dati vuole ricevere, ma \u00e8 altrettanto vero che, se quei dati non sono stati previsti, non potranno mai essere forniti come risposta. Infatti, l\u2019utilizzatore pu\u00f2 richiedere solo un sottoinsieme dei dati esposti dalla API. Dopo aver clonato il repo, aggiungiamo un nuovo progetto Nunit Test Project (.NET Core) alla solution:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"943\" height=\"652\" data-attachment-id=\"26575\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/testiamo-la-nostra-api-con-graphql-e-hot-chocolate\/attachment\/image1-1\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image1-1.png?fit=943%2C652&amp;ssl=1\" data-orig-size=\"943,652\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image1-1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image1-1.png?fit=943%2C652&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image1-1.png?resize=943%2C652&#038;ssl=1\" alt=\"\" class=\"wp-image-26575\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image1-1.png 943w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image1-1-480x332.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 943px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Tale progetto ha gi\u00e0 i pacchetti NuGet di&nbsp;<strong><em>Nunit<\/em><\/strong>,&nbsp;<strong><em>Nunit3TestAdapter<\/em><\/strong>&nbsp;e&nbsp;<strong><em>Microsoft.NET.Test.Sdk<\/em><\/strong>&nbsp;che ci occorrono per poter creare ed eseguire test. Aggiungiamo anche&nbsp;<strong><em>Microsoft.AspNetCore.Mvc.Core.<\/em><\/strong>&nbsp;Assicuriamoci di aver installato tutto correttamente, eseguendo il test creato dal template.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"486\" height=\"242\" data-attachment-id=\"26578\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/testiamo-la-nostra-api-con-graphql-e-hot-chocolate\/attachment\/image2-1\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image2-1.png?fit=486%2C242&amp;ssl=1\" data-orig-size=\"486,242\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image2-1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image2-1.png?fit=486%2C242&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image2-1.png?resize=486%2C242&#038;ssl=1\" alt=\"\" class=\"wp-image-26578\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image2-1.png 486w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image2-1-480x239.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 486px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Ora che \u00e8 tutto configurato possiamo creare classi che testano le nostre query GraphQL. Iniziamo con creare la classe che testa la query sui libri. Creiamo la classe&nbsp;<strong><em>BookQueryTest&nbsp;<\/em><\/strong>e il metodo&nbsp;<strong><em>ShouldReturnBooks&nbsp;<\/em><\/strong>nella quale vogliamo testare che la seguente query venga gestita in maniera corretta da GraphQL.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nquery {\n\u00a0\u00a0\u00a0\u00a0books {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0nodes {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0id\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0title\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0price\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">HotChocolate mette a disposizione un&nbsp;<strong>QueryExecutor<\/strong>, che a fronte di una query request restituisce il risultato dell\u2019esecuzione. Quindi, se nel nostro test facciamo il setup del IoC container, possiamo poi chiedere al&nbsp;<strong>ServiceProvider<\/strong>&nbsp;di restituire un\u2019istanza di&nbsp;<strong>IQueryExecutor<\/strong>. Una possibile soluzione potrebbe essere quella di creare un IoC container ad hoc per i test in cui andare a registrare le implementazioni mock per le rispettive interfacce, ma ho preferito utilizzare lo stesso motore IoC dell\u2019applicazione.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nIServiceCollection services = new ServiceCollection();\nvar startup = new Startup();\nstartup.ConfigureServices(services);\nvar provider = services.BuildServiceProvider();\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">A questo punto possiamo farci restituire dal provider un\u2019istanza di&nbsp;<strong><em>IQueryExecutor<\/em><\/strong><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nvar executor = provider.GetService&lt;IQueryExecutor&gt;();\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Prepariamo la richiesta:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nIReadOnlyQueryRequest request =\n\u00a0\u00a0\u00a0\u00a0QueryRequestBuilder.New()\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.SetQuery(BooksQuery)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.SetServices(provider)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.Create();\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">In questo caso,&nbsp;<strong>BooksQuery<\/strong>\u00e8 la query che vogliamo testare. La fase di&nbsp;<em>arrange&nbsp;<\/em>\u00e8 terminata, possiamo passare la nostra request all\u2019executor per la fase di&nbsp;<em>act.<\/em><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nIExecutionResult result = await executor.ExecuteAsync(request);\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Per poter fare gli opportuni assert, dobbiamo rendere&nbsp;<strong>result<\/strong>pi\u00f9 leggibile. HotChocolate mette a disposizione un extensions method che trasforma result in un JSON.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nvar resultJson = result.ToJson();\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">La variabile<strong>&nbsp;resultJson&nbsp;<\/strong>\u00e8 senza dubbio leggibile ma ancora risulta difficile riuscire a fare uno o pi\u00f9&nbsp;<em>assert<\/em>. Possiamo servirci di&nbsp;<strong>ApprovalTests:&nbsp;<\/strong>una libreria che salva un file nel nostro progetto, che terr\u00e0 poi come campione per confrontarlo con i successivi risultati del test. Aggiungiamola quindi al progetto di test mediante NuGet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il nostro&nbsp;<em>assert<\/em>&nbsp;sar\u00e0:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nApprovals.Verify(resultJson);\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Aggiungiamo la seguente annotazione alla classe, come da documentazione:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\n&#x5B;UseReporter(typeof(DiffReporter))]\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Questo permetter\u00e0 alla libreria di individuare il tipo di confronto che dovr\u00e0 fare quando invochiamo il metodo Verify. Siamo pronti a lanciare il nostro test, e se tutto va a buon fine, avremo un test rosso:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"797\" height=\"308\" data-attachment-id=\"26583\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/testiamo-la-nostra-api-con-graphql-e-hot-chocolate\/attachment\/image3-1\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image3-1.png?fit=797%2C308&amp;ssl=1\" data-orig-size=\"797,308\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image3-1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image3-1.png?fit=797%2C308&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image3-1.png?resize=797%2C308&#038;ssl=1\" alt=\"\" class=\"wp-image-26583\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image3-1.png 797w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image3-1-480x185.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 797px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Guardando tra i file della soluzione possiamo, notare l\u2019aggiunta di un nuovo file<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>BookQueryTest.ShouldReturnBooks.received.txt<\/em>:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"654\" height=\"148\" data-attachment-id=\"26585\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/testiamo-la-nostra-api-con-graphql-e-hot-chocolate\/attachment\/image4-1\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image4-1.png?fit=654%2C148&amp;ssl=1\" data-orig-size=\"654,148\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image4-1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image4-1.png?fit=654%2C148&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image4-1.png?resize=654%2C148&#038;ssl=1\" alt=\"\" class=\"wp-image-26585\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image4-1.png 654w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image4-1-480x109.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 654px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">All\u2019interno di questo file troveremo il risultato dell\u2019esecuzione della query:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\n{\n  &quot;data&quot;: {\n    &quot;books&quot;: {\n      &quot;nodes&quot;: &#x5B;\n        {\n          &quot;id&quot;: &quot;1&quot;,\n          &quot;title&quot;: &quot;First Book&quot;,\n          &quot;price&quot;: 10.0\n        },\n        {\n          &quot;id&quot;: &quot;2&quot;,\n          &quot;title&quot;: &quot;Second Book&quot;,\n          &quot;price&quot;: 11.0\n        },\n        {\n          &quot;id&quot;: &quot;3&quot;,\n          &quot;title&quot;: &quot;Third Book&quot;,\n          &quot;price&quot;: 12.0\n        },\n        {\n          &quot;id&quot;: &quot;4&quot;,\n          &quot;title&quot;: &quot;Fourth Book&quot;,\n          &quot;price&quot;: 15.0\n        }\n      ]\n    }\n  }\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Perfetto direi, \u00e8 proprio quello che dovevamo aspettarci. Rinominiamo il file sostituendo&nbsp;<strong><em>received<\/em><\/strong>&nbsp;con&nbsp;<strong><em>approved<\/em><\/strong>:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"663\" height=\"139\" data-attachment-id=\"26588\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/testiamo-la-nostra-api-con-graphql-e-hot-chocolate\/attachment\/image5\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image5.png?fit=663%2C139&amp;ssl=1\" data-orig-size=\"663,139\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image5\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image5.png?fit=663%2C139&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image5.png?resize=663%2C139&#038;ssl=1\" alt=\"\" class=\"wp-image-26588\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image5.png 663w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image5-480x101.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 663px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Lanciamo di nuovo il test:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"802\" height=\"266\" data-attachment-id=\"26590\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/testiamo-la-nostra-api-con-graphql-e-hot-chocolate\/attachment\/image6-1\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image6-1.png?fit=802%2C266&amp;ssl=1\" data-orig-size=\"802,266\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image6-1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image6-1.png?fit=802%2C266&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image6-1.png?resize=802%2C266&#038;ssl=1\" alt=\"\" class=\"wp-image-26590\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image6-1.png 802w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image6-1-480x159.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 802px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Test verde, ottimo. Adesso dobbiamo solo testare le mutation, creando un test che verifica la creazione di un libro. Aggiungiamo la classe&nbsp;<strong><em>CreateBookMutationTest<\/em><\/strong>&nbsp;al progetto, e al suo interno creiamo il metodo&nbsp;<strong><em>ShouldCreateBook<\/em><\/strong>. I passi da fare sono esattamente quelli del test precedente, cambieremo solo la query che passeremo al&nbsp;<em>QueryRequestBuild<\/em>:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nmutation {\n\u00a0\u00a0\u00a0\u00a0createBook(inputBook: {authorId: 4, price:50, title:&quot;&quot;Test book&quot;&quot;}) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0price\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0title\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0authorId\n\u00a0\u00a0\u00a0\u00a0}\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Avviando il test, anche in questo caso avremo un fallimento. Chiedendo di specificare il file di riferimento, controlliamo che&nbsp;<em>CreateBookMutationTest.ShouldCreateBook.received.txt&nbsp;<\/em>contenga i valori attesi:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\n{\n    &quot;data&quot;: {\n        &quot;createBook&quot;: {\n            &quot;price&quot;: 50.0,\n             &quot;title&quot;: &quot;Test book&quot;,\n             &quot;authorId&quot;: 4\n        }\n    }\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Rinominiamo il file come fatto in precedenza, e rilanciamo il test: se tutto va come previsto sar\u00e0 verde!<br>\u00c8 possibile passare dei parametri alla query, cos\u00ec da non avere i valori di input preimpostati.<br>Proviamo ad applicare questo metodo alla query&nbsp;<em>CreateBook<\/em>: lo scopo \u00e8 quello di non avere l\u2019id autore, il prezzo e il titolo gi\u00e0 nella query, ma vogliamo che sia passato ogni volta nella fase di creazione richiesta.<br>Questo ovviamente ha un vantaggio fondamentale, ovvero quello di poter testare la query con diversi input modificando solo i valori passati.<br>Ecco come cambia la query&nbsp;<em>CreateBook<\/em>:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nmutation($title: String, $price: Decimal!, $authorId: Int!) {\n\u00a0\u00a0\u00a0\u00a0createBook(inputBook: {authorId: $authorId, price:$price, title:$title}) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0price\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0title\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0authorId\n\u00a0\u00a0\u00a0}\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">I parametri di input vanno dichiarati subito dopo la parola chiave&nbsp;<em>mutation&nbsp;<\/em>e successivamente dove vogliamo che vengano utilizzati. Oltre al nome del parametro va specificato il tipo, mentre il punto esclamativo sta ad indicare che \u00e8 un parametro obbligatorio.<br>Ora non resta altro che andare a specificarli nel&nbsp;<em>QueryRequestBuilder<\/em>&nbsp;mediante il metodo&nbsp;<strong><em>AddVariableValue<\/em><\/strong><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nIReadOnlyQueryRequest request =\n\u00a0\u00a0\u00a0\u00a0QueryRequestBuilder.New()\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.SetQuery(CreateBookQuery)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.SetServices(provider)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.AddVariableValue(&quot;title&quot;, &quot;Test book&quot;)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.AddVariableValue(&quot;authorId&quot;, 4)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.AddVariableValue(&quot;price&quot;, 50.0)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.Create();\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Abbiamo visto i due possibili casi. Le altre query e mutation esposte dalla API vanno testate esattamente allo stesso modo. In un progetto pi\u00f9 complesso, la sezione di&nbsp;<em>arrange&nbsp;<\/em>potrebbe essere pi\u00f9 complessa non limitandosi alla sola creazione del IoC container ma anche alla creazione di dati ad hoc per poter verificare la correttezza delle query di recupero informazioni.&nbsp;<em>Act<\/em>&nbsp;e&nbsp;<em>Assert<\/em>, invece, potranno continuare ad essere cos\u00ec come sono.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Spero di avervi incuriosito.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Al prossimo articolo!<\/p>\n\n\n\n\n","protected":false},"excerpt":{"rendered":"<p>GraphQL: vediamo come testare query e mutation in ASP.NET Core con Hot Chocolate<\/p>\n","protected":false},"author":196716250,"featured_media":26573,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"off","_et_pb_old_content":"","_et_gb_content_width":"","_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","inline_featured_image":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_wpcom_ai_launchpad_first_post":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"{title}\n\n{excerpt}\n\n{url}","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_wpas_customize_per_network":false,"jetpack_post_was_ever_published":false},"categories":[688637374],"tags":[688637414,688637382,688637415,688637409],"class_list":["post-26571","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","tag-asp-net-core","tag-c","tag-graphql","tag-testing"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Testiamo la nostra API con GraphQL e Hot Chocolate - Blexin<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blexin.com\/it\/blog\/testiamo-la-nostra-api-con-graphql-e-hot-chocolate\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Testiamo la nostra API con GraphQL e Hot Chocolate - Blexin\" \/>\n<meta property=\"og:description\" content=\"GraphQL: vediamo come testare query e mutation in ASP.NET Core con Hot Chocolate\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blexin.com\/it\/blog\/testiamo-la-nostra-api-con-graphql-e-hot-chocolate\/\" \/>\n<meta property=\"og:site_name\" content=\"Blexin\" \/>\n<meta property=\"article:published_time\" content=\"2020-06-30T22:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-01-13T08:40:01+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i1.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/f05eb91a-2779-4926-9141-5f41a88a81d3.png?fit=1024%2C608\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"608\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Adolfo Arnold\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Adolfo Arnold\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/testiamo-la-nostra-api-con-graphql-e-hot-chocolate\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/testiamo-la-nostra-api-con-graphql-e-hot-chocolate\\\/\"},\"author\":{\"name\":\"Adolfo Arnold\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#\\\/schema\\\/person\\\/0de430b61c8a48b0e9d81308817c1517\"},\"headline\":\"Testiamo la nostra API con GraphQL e Hot Chocolate\",\"datePublished\":\"2020-06-30T22:00:00+00:00\",\"dateModified\":\"2021-01-13T08:40:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/testiamo-la-nostra-api-con-graphql-e-hot-chocolate\\\/\"},\"wordCount\":902,\"image\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/testiamo-la-nostra-api-con-graphql-e-hot-chocolate\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/f05eb91a-2779-4926-9141-5f41a88a81d3.png?fit=1024%2C608&ssl=1\",\"keywords\":[\"Asp.net core\",\"C#\",\"GraphQL\",\"Testing\"],\"articleSection\":[\"Blog\"],\"inLanguage\":\"it-IT\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/testiamo-la-nostra-api-con-graphql-e-hot-chocolate\\\/\",\"url\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/testiamo-la-nostra-api-con-graphql-e-hot-chocolate\\\/\",\"name\":\"Testiamo la nostra API con GraphQL e Hot Chocolate - Blexin\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/testiamo-la-nostra-api-con-graphql-e-hot-chocolate\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/testiamo-la-nostra-api-con-graphql-e-hot-chocolate\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/f05eb91a-2779-4926-9141-5f41a88a81d3.png?fit=1024%2C608&ssl=1\",\"datePublished\":\"2020-06-30T22:00:00+00:00\",\"dateModified\":\"2021-01-13T08:40:01+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#\\\/schema\\\/person\\\/0de430b61c8a48b0e9d81308817c1517\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/testiamo-la-nostra-api-con-graphql-e-hot-chocolate\\\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/testiamo-la-nostra-api-con-graphql-e-hot-chocolate\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/testiamo-la-nostra-api-con-graphql-e-hot-chocolate\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/f05eb91a-2779-4926-9141-5f41a88a81d3.png?fit=1024%2C608&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/f05eb91a-2779-4926-9141-5f41a88a81d3.png?fit=1024%2C608&ssl=1\",\"width\":1024,\"height\":608},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/testiamo-la-nostra-api-con-graphql-e-hot-chocolate\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/blexin.com\\\/it\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Testiamo la nostra API con GraphQL e Hot Chocolate\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#website\",\"url\":\"https:\\\/\\\/blexin.com\\\/it\\\/\",\"name\":\"Blexin\",\"description\":\"Con noi \u00e8 semplice\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blexin.com\\\/it\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#\\\/schema\\\/person\\\/0de430b61c8a48b0e9d81308817c1517\",\"name\":\"Adolfo Arnold\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ff2a87b54d0f130d7452164533199af05ef16dbd08b9241729946cea0eec7cca?s=96&d=identicon&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ff2a87b54d0f130d7452164533199af05ef16dbd08b9241729946cea0eec7cca?s=96&d=identicon&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ff2a87b54d0f130d7452164533199af05ef16dbd08b9241729946cea0eec7cca?s=96&d=identicon&r=g\",\"caption\":\"Adolfo Arnold\"},\"url\":\"https:\\\/\\\/blexin.com\\\/it\\\/author\\\/adolfo-arnoldblexin-com\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Testiamo la nostra API con GraphQL e Hot Chocolate - Blexin","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blexin.com\/it\/blog\/testiamo-la-nostra-api-con-graphql-e-hot-chocolate\/","og_locale":"it_IT","og_type":"article","og_title":"Testiamo la nostra API con GraphQL e Hot Chocolate - Blexin","og_description":"GraphQL: vediamo come testare query e mutation in ASP.NET Core con Hot Chocolate","og_url":"https:\/\/blexin.com\/it\/blog\/testiamo-la-nostra-api-con-graphql-e-hot-chocolate\/","og_site_name":"Blexin","article_published_time":"2020-06-30T22:00:00+00:00","article_modified_time":"2021-01-13T08:40:01+00:00","og_image":[{"width":1024,"height":608,"url":"https:\/\/i1.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/f05eb91a-2779-4926-9141-5f41a88a81d3.png?fit=1024%2C608","type":"image\/png"}],"author":"Adolfo Arnold","twitter_card":"summary_large_image","twitter_misc":{"Scritto da":"Adolfo Arnold","Tempo di lettura stimato":"5 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blexin.com\/it\/blog\/testiamo-la-nostra-api-con-graphql-e-hot-chocolate\/#article","isPartOf":{"@id":"https:\/\/blexin.com\/it\/blog\/testiamo-la-nostra-api-con-graphql-e-hot-chocolate\/"},"author":{"name":"Adolfo Arnold","@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/0de430b61c8a48b0e9d81308817c1517"},"headline":"Testiamo la nostra API con GraphQL e Hot Chocolate","datePublished":"2020-06-30T22:00:00+00:00","dateModified":"2021-01-13T08:40:01+00:00","mainEntityOfPage":{"@id":"https:\/\/blexin.com\/it\/blog\/testiamo-la-nostra-api-con-graphql-e-hot-chocolate\/"},"wordCount":902,"image":{"@id":"https:\/\/blexin.com\/it\/blog\/testiamo-la-nostra-api-con-graphql-e-hot-chocolate\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/f05eb91a-2779-4926-9141-5f41a88a81d3.png?fit=1024%2C608&ssl=1","keywords":["Asp.net core","C#","GraphQL","Testing"],"articleSection":["Blog"],"inLanguage":"it-IT"},{"@type":"WebPage","@id":"https:\/\/blexin.com\/it\/blog\/testiamo-la-nostra-api-con-graphql-e-hot-chocolate\/","url":"https:\/\/blexin.com\/it\/blog\/testiamo-la-nostra-api-con-graphql-e-hot-chocolate\/","name":"Testiamo la nostra API con GraphQL e Hot Chocolate - Blexin","isPartOf":{"@id":"https:\/\/blexin.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blexin.com\/it\/blog\/testiamo-la-nostra-api-con-graphql-e-hot-chocolate\/#primaryimage"},"image":{"@id":"https:\/\/blexin.com\/it\/blog\/testiamo-la-nostra-api-con-graphql-e-hot-chocolate\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/f05eb91a-2779-4926-9141-5f41a88a81d3.png?fit=1024%2C608&ssl=1","datePublished":"2020-06-30T22:00:00+00:00","dateModified":"2021-01-13T08:40:01+00:00","author":{"@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/0de430b61c8a48b0e9d81308817c1517"},"breadcrumb":{"@id":"https:\/\/blexin.com\/it\/blog\/testiamo-la-nostra-api-con-graphql-e-hot-chocolate\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blexin.com\/it\/blog\/testiamo-la-nostra-api-con-graphql-e-hot-chocolate\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/blexin.com\/it\/blog\/testiamo-la-nostra-api-con-graphql-e-hot-chocolate\/#primaryimage","url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/f05eb91a-2779-4926-9141-5f41a88a81d3.png?fit=1024%2C608&ssl=1","contentUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/f05eb91a-2779-4926-9141-5f41a88a81d3.png?fit=1024%2C608&ssl=1","width":1024,"height":608},{"@type":"BreadcrumbList","@id":"https:\/\/blexin.com\/it\/blog\/testiamo-la-nostra-api-con-graphql-e-hot-chocolate\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blexin.com\/it\/"},{"@type":"ListItem","position":2,"name":"Testiamo la nostra API con GraphQL e Hot Chocolate"}]},{"@type":"WebSite","@id":"https:\/\/blexin.com\/it\/#website","url":"https:\/\/blexin.com\/it\/","name":"Blexin","description":"Con noi \u00e8 semplice","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blexin.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Person","@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/0de430b61c8a48b0e9d81308817c1517","name":"Adolfo Arnold","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/secure.gravatar.com\/avatar\/ff2a87b54d0f130d7452164533199af05ef16dbd08b9241729946cea0eec7cca?s=96&d=identicon&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/ff2a87b54d0f130d7452164533199af05ef16dbd08b9241729946cea0eec7cca?s=96&d=identicon&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ff2a87b54d0f130d7452164533199af05ef16dbd08b9241729946cea0eec7cca?s=96&d=identicon&r=g","caption":"Adolfo Arnold"},"url":"https:\/\/blexin.com\/it\/author\/adolfo-arnoldblexin-com\/"}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/f05eb91a-2779-4926-9141-5f41a88a81d3.png?fit=1024%2C608&ssl=1","jetpack_shortlink":"https:\/\/wp.me\/pcyUBx-6Uz","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/26571","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/users\/196716250"}],"replies":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/comments?post=26571"}],"version-history":[{"count":12,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/26571\/revisions"}],"predecessor-version":[{"id":27771,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/26571\/revisions\/27771"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/media\/26573"}],"wp:attachment":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/media?parent=26571"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/categories?post=26571"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/tags?post=26571"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}