{"id":1008,"date":"2021-10-07T01:49:39","date_gmt":"2021-10-06T12:49:39","guid":{"rendered":"https:\/\/blog.wiseowls.co.nz\/?p=1008"},"modified":"2026-03-08T00:48:42","modified_gmt":"2026-03-07T11:48:42","slug":"azure-functions-openapi-ef-core","status":"publish","type":"post","link":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/10\/07\/azure-functions-openapi-ef-core\/","title":{"rendered":"Azure Functions \u2013 OpenAPI + EF Core = \ud83d\udca5"},"content":{"rendered":"<p>Creating Swagger-enabled Azure Functions is not that hard to do. Visual Studio literally comes with a template for that:<\/p>\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"972\" height=\"641\" src=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/10\/image-1.png\" alt=\"Visual Studio Azure Functions OpenAPI template selection dialog\" class=\"wp-image-1009\" srcset=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/10\/image-1.png 972w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/10\/image-1-300x198.png 300w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/10\/image-1-768x506.png 768w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/figure>\n<p>Inspecting the newly created project we see that it comes down to one NuGet package. It magically hooks into <strong>IWebJobsStartup<\/strong> and registers additional routes for Swagger UI and OpenAPI document. When run, it reflects upon suitable entry points in the assembly and builds required responses on the fly. Elegant indeed.<\/p>\n<h2 class=\"wp-block-heading\">Installing Entity Framework<\/h2>\n<p>Now, suppose, we need to talk to Azure SQL. So, we&#8217;d like to add EF Core to the mix. As much as we love to go for latest and greatest, unfortunately it&#8217;s <a href=\"https:\/\/github.com\/Azure\/azure-functions-openapi-extension\/issues\/173\">a bit messy<\/a> at the moment. Instead let&#8217;s get a bit more conservative and stick to EFCore 3.1. <\/p>\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"726\" height=\"405\" src=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/10\/image-2.png\" alt=\"Visual Studio Azure Functions OpenAPI template selection dialog\" class=\"wp-image-1010\" srcset=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/10\/image-2.png 726w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/10\/image-2-300x167.png 300w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><\/figure>\n<p>We did not expect that, did we?<\/p>\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"362\" src=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/10\/image-3-1024x362.png\" alt=\"Visual Studio Azure Functions OpenAPI template selection dialog\" class=\"wp-image-1011\" srcset=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/10\/image-3-1024x362.png 1024w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/10\/image-3-300x106.png 300w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/10\/image-3-768x272.png 768w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/10\/image-3.png 1119w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/figure>\n<p>The error message is pretty clear: the assembly somehow did not get copied to the output location. And indeed, the file was missing:<\/p>\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"165\" src=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/10\/image-4-1024x165.png\" alt=\"Visual Studio Azure Functions OpenAPI template selection dialog\" class=\"wp-image-1013\" srcset=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/10\/image-4-1024x165.png 1024w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/10\/image-4-300x48.png 300w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/10\/image-4-768x124.png 768w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/10\/image-4.png 1109w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/figure>\n<p>Apparently when VS builds the function, it makes a second copy of the libraries it thinks are required. And in our case, it decided it&#8217;s not picking up the dependency. Adding <code>&lt;_FunctionsSkipCleanOutput>true&lt;\/_FunctionsSkipCleanOutput><\/code> to the project file will fix that:<\/p>\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"798\" height=\"490\" src=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/10\/image-5.png\" alt=\"Visual Studio Azure Functions OpenAPI template selection dialog\" class=\"wp-image-1014\" srcset=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/10\/image-5.png 798w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/10\/image-5-300x184.png 300w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/10\/image-5-768x472.png 768w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><\/figure>\n<h2 class=\"wp-block-heading\">Are there yet?<\/h2>\n<p>Probably, but there&#8217;s a catch: our deployment package just got bigger. Alternatively, we could downgrade EF Core to <strong>3.1.13<\/strong> which happens to use the same version of <code>Microsoft.Extensions.Logging.Abstractions<\/code>. This way we&#8217;d avoid having to hack project files at expense or limiting ourselves to an older version of EF Core. Ultimately, we hope OpenAPI extension picks up the slack and goes GA soon. For now, looks like we&#8217;ll have to stick to it.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Creating Swagger-enabled Azure Functions is not that hard to do. Visual Studio literally comes with a template for that: Inspecting the newly created project we see that it comes down to one NuGet package. It magically hooks into IWebJobsStartup and registers additional routes for Swagger UI and OpenAPI document. When run, it reflects upon suitable &hellip; <a href=\"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/10\/07\/azure-functions-openapi-ef-core\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Azure Functions \u2013 OpenAPI + EF Core = \ud83d\udca5&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":360,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[11],"tags":[12,23,59],"class_list":["post-1008","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev","tag-c","tag-ef-core","tag-sql"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Azure Functions \u2013 OpenAPI + EF Core = \ud83d\udca5 - Timur and associates<\/title>\n<meta name=\"description\" content=\"Having spent a little while on getting OpenAPI extension to work with EF Core - we thought it&#039;s worth documenting\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/10\/07\/azure-functions-openapi-ef-core\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Azure Functions \u2013 OpenAPI + EF Core = \ud83d\udca5 - Timur and associates\" \/>\n<meta property=\"og:description\" content=\"Having spent a little while on getting OpenAPI extension to work with EF Core - we thought it&#039;s worth documenting\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/10\/07\/azure-functions-openapi-ef-core\/\" \/>\n<meta property=\"og:site_name\" content=\"Timur and associates\" \/>\n<meta property=\"article:published_time\" content=\"2021-10-06T12:49:39+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-07T11:48:42+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2020\/02\/helloquence-5fNmWej4tAA-unsplash-scaled-e1581823690656.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1292\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"timur\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@TimurKh\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2021\\\/10\\\/07\\\/azure-functions-openapi-ef-core\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2021\\\/10\\\/07\\\/azure-functions-openapi-ef-core\\\/\"},\"author\":{\"name\":\"timur\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/#\\\/schema\\\/person\\\/34d0ed30d573b5bc317ea990bd2e0c59\"},\"headline\":\"Azure Functions \u2013 OpenAPI + EF Core = \ud83d\udca5\",\"datePublished\":\"2021-10-06T12:49:39+00:00\",\"dateModified\":\"2026-03-07T11:48:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2021\\\/10\\\/07\\\/azure-functions-openapi-ef-core\\\/\"},\"wordCount\":274,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2021\\\/10\\\/07\\\/azure-functions-openapi-ef-core\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/wp-content\\\/uploads\\\/2020\\\/02\\\/helloquence-5fNmWej4tAA-unsplash-scaled-e1581823690656.jpg\",\"keywords\":[\"c#\",\"ef-core\",\"sql\"],\"articleSection\":[\"Development\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2021\\\/10\\\/07\\\/azure-functions-openapi-ef-core\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2021\\\/10\\\/07\\\/azure-functions-openapi-ef-core\\\/\",\"url\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2021\\\/10\\\/07\\\/azure-functions-openapi-ef-core\\\/\",\"name\":\"Azure Functions \u2013 OpenAPI + EF Core = \ud83d\udca5 - Timur and associates\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2021\\\/10\\\/07\\\/azure-functions-openapi-ef-core\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2021\\\/10\\\/07\\\/azure-functions-openapi-ef-core\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/wp-content\\\/uploads\\\/2020\\\/02\\\/helloquence-5fNmWej4tAA-unsplash-scaled-e1581823690656.jpg\",\"datePublished\":\"2021-10-06T12:49:39+00:00\",\"dateModified\":\"2026-03-07T11:48:42+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/#\\\/schema\\\/person\\\/34d0ed30d573b5bc317ea990bd2e0c59\"},\"description\":\"Having spent a little while on getting OpenAPI extension to work with EF Core - we thought it's worth documenting\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2021\\\/10\\\/07\\\/azure-functions-openapi-ef-core\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2021\\\/10\\\/07\\\/azure-functions-openapi-ef-core\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2021\\\/10\\\/07\\\/azure-functions-openapi-ef-core\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/wp-content\\\/uploads\\\/2020\\\/02\\\/helloquence-5fNmWej4tAA-unsplash-scaled-e1581823690656.jpg\",\"contentUrl\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/wp-content\\\/uploads\\\/2020\\\/02\\\/helloquence-5fNmWej4tAA-unsplash-scaled-e1581823690656.jpg\",\"width\":2560,\"height\":1292},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2021\\\/10\\\/07\\\/azure-functions-openapi-ef-core\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Azure Functions \u2013 OpenAPI + EF Core = \ud83d\udca5\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/#website\",\"url\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/\",\"name\":\"Timur and associates\",\"description\":\"Notes of an IT contractor\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/#\\\/schema\\\/person\\\/34d0ed30d573b5bc317ea990bd2e0c59\",\"name\":\"timur\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/23d55e17d4f0990ee4d12bc6e5dcfb58a292934efd62a185756876379e780b16?s=96&r=pg\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/23d55e17d4f0990ee4d12bc6e5dcfb58a292934efd62a185756876379e780b16?s=96&r=pg\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/23d55e17d4f0990ee4d12bc6e5dcfb58a292934efd62a185756876379e780b16?s=96&r=pg\",\"caption\":\"timur\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/TimurKh\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Azure Functions \u2013 OpenAPI + EF Core = \ud83d\udca5 - Timur and associates","description":"Having spent a little while on getting OpenAPI extension to work with EF Core - we thought it's worth documenting","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:\/\/blog.wiseowls.co.nz\/index.php\/2021\/10\/07\/azure-functions-openapi-ef-core\/","og_locale":"en_US","og_type":"article","og_title":"Azure Functions \u2013 OpenAPI + EF Core = \ud83d\udca5 - Timur and associates","og_description":"Having spent a little while on getting OpenAPI extension to work with EF Core - we thought it's worth documenting","og_url":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/10\/07\/azure-functions-openapi-ef-core\/","og_site_name":"Timur and associates","article_published_time":"2021-10-06T12:49:39+00:00","article_modified_time":"2026-03-07T11:48:42+00:00","og_image":[{"width":2560,"height":1292,"url":"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2020\/02\/helloquence-5fNmWej4tAA-unsplash-scaled-e1581823690656.jpg","type":"image\/jpeg"}],"author":"timur","twitter_card":"summary_large_image","twitter_creator":"@TimurKh","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/10\/07\/azure-functions-openapi-ef-core\/#article","isPartOf":{"@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/10\/07\/azure-functions-openapi-ef-core\/"},"author":{"name":"timur","@id":"https:\/\/blog.wiseowls.co.nz\/#\/schema\/person\/34d0ed30d573b5bc317ea990bd2e0c59"},"headline":"Azure Functions \u2013 OpenAPI + EF Core = \ud83d\udca5","datePublished":"2021-10-06T12:49:39+00:00","dateModified":"2026-03-07T11:48:42+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/10\/07\/azure-functions-openapi-ef-core\/"},"wordCount":274,"commentCount":0,"image":{"@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/10\/07\/azure-functions-openapi-ef-core\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2020\/02\/helloquence-5fNmWej4tAA-unsplash-scaled-e1581823690656.jpg","keywords":["c#","ef-core","sql"],"articleSection":["Development"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/10\/07\/azure-functions-openapi-ef-core\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/10\/07\/azure-functions-openapi-ef-core\/","url":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/10\/07\/azure-functions-openapi-ef-core\/","name":"Azure Functions \u2013 OpenAPI + EF Core = \ud83d\udca5 - Timur and associates","isPartOf":{"@id":"https:\/\/blog.wiseowls.co.nz\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/10\/07\/azure-functions-openapi-ef-core\/#primaryimage"},"image":{"@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/10\/07\/azure-functions-openapi-ef-core\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2020\/02\/helloquence-5fNmWej4tAA-unsplash-scaled-e1581823690656.jpg","datePublished":"2021-10-06T12:49:39+00:00","dateModified":"2026-03-07T11:48:42+00:00","author":{"@id":"https:\/\/blog.wiseowls.co.nz\/#\/schema\/person\/34d0ed30d573b5bc317ea990bd2e0c59"},"description":"Having spent a little while on getting OpenAPI extension to work with EF Core - we thought it's worth documenting","breadcrumb":{"@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/10\/07\/azure-functions-openapi-ef-core\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/10\/07\/azure-functions-openapi-ef-core\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/10\/07\/azure-functions-openapi-ef-core\/#primaryimage","url":"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2020\/02\/helloquence-5fNmWej4tAA-unsplash-scaled-e1581823690656.jpg","contentUrl":"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2020\/02\/helloquence-5fNmWej4tAA-unsplash-scaled-e1581823690656.jpg","width":2560,"height":1292},{"@type":"BreadcrumbList","@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/10\/07\/azure-functions-openapi-ef-core\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.wiseowls.co.nz\/"},{"@type":"ListItem","position":2,"name":"Azure Functions \u2013 OpenAPI + EF Core = \ud83d\udca5"}]},{"@type":"WebSite","@id":"https:\/\/blog.wiseowls.co.nz\/#website","url":"https:\/\/blog.wiseowls.co.nz\/","name":"Timur and associates","description":"Notes of an IT contractor","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.wiseowls.co.nz\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blog.wiseowls.co.nz\/#\/schema\/person\/34d0ed30d573b5bc317ea990bd2e0c59","name":"timur","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/23d55e17d4f0990ee4d12bc6e5dcfb58a292934efd62a185756876379e780b16?s=96&r=pg","url":"https:\/\/secure.gravatar.com\/avatar\/23d55e17d4f0990ee4d12bc6e5dcfb58a292934efd62a185756876379e780b16?s=96&r=pg","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/23d55e17d4f0990ee4d12bc6e5dcfb58a292934efd62a185756876379e780b16?s=96&r=pg","caption":"timur"},"sameAs":["https:\/\/x.com\/TimurKh"]}]}},"_links":{"self":[{"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/posts\/1008","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/comments?post=1008"}],"version-history":[{"count":5,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/posts\/1008\/revisions"}],"predecessor-version":[{"id":1361,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/posts\/1008\/revisions\/1361"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/media\/360"}],"wp:attachment":[{"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/media?parent=1008"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/categories?post=1008"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/tags?post=1008"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}