{"id":31966,"date":"2024-03-26T14:27:17","date_gmt":"2024-03-26T13:27:17","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=31966"},"modified":"2024-09-02T09:23:49","modified_gmt":"2024-09-02T07:23:49","slug":"add-a-ui-to-explore-the-feathers-js-api","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/add-a-ui-to-explore-the-feathers-js-api\/","title":{"rendered":"Add a UI to explore the Feathers.js API"},"content":{"rendered":"\n<p>Following on from my previous article: <a href=\"https:\/\/www.dbi-services.com\/blog\/create-rest-api-from-your-database-in-minute-with-feathers-js\/\">Create REST API from your database in minute with Feathers.js<\/a>, today I want to add a UI to explore the Feathers.js API.<\/p>\n\n\n\n<p>When we provide an API, it&#8217;s common to make a tool available to explore the exposed methods.<br><a href=\"https:\/\/swagger.io\/tools\/swagger-ui\/\">Swagger UI<\/a> is one such tool, and fortunately, in the Feathers.js ecosystem, a <a href=\"https:\/\/www.npmjs.com\/package\/feathers-swagger\">package<\/a> is available for this purpose.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-first-step-install-and-declare-the-package\">First step: install and declare the package<\/h2>\n\n\n\n<p>In my previous article, I created a Feathers.js project using Koa as HTTP framework, TypeScript as language and NPM as package manager. To install the <a href=\"https:\/\/feathersjs-ecosystem.github.io\/feathers-swagger\/#\/\">feathers-swagger<\/a> package, I use the command :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>npm install feathers-swagger swagger-ui-dist koa-mount koa-static<\/code><\/pre>\n\n\n\n<p>Once I&#8217;ve installed the necessary packages, I just need to declare the Swagger interface in my project.<\/p>\n\n\n\n<p>At the beginning of the src\/app.ts file, I add the swagger package import:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import swagger from 'feathers-swagger';\n<\/code><\/pre>\n\n\n\n<p>Then, <strong>before<\/strong> the &#8220;app.configure(services)&#8221;, I add the Swagger declaration:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>app.configure(swagger({\n  specs: {\n    info: {\n      title: 'Workshop API ',\n      description: 'Workshop API rest services',\n      version: '1.0.0',\n    }\n  },\n  ui: swagger.swaggerUI({ docsPath: '\/docs' }),\n}))<\/code><\/pre>\n\n\n\n<p><strong>Note: <\/strong>the position of the declaration in the file is very important: if it&#8217;s after the services configuration, the Swagger interface will be empty.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-second-step-expose-the-service-in-swagger-ui\">Second step: expose the service in Swagger UI<\/h2>\n\n\n\n<p>Once the feathers-swagger package has been installed and initialized in the project, all I have to do is tell the services what to expose. To do this, I add a docs part to my service workshop service in the file (src\/services\/workshop\/workshop.ts).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\n\/\/ A configure function that registers the service and its hooks via `app.configure`\nexport const workshop = (app: Application) =&gt; {\n  \/\/ Register our service on the Feathers application\n  app.use(workshopPath, new WorkshopService(getOptions(app)), {\n    \/\/ A list of all methods this service exposes externally\n    methods: workshopMethods,\n    \/\/ You can add additional custom events to be sent to clients here\n    events: &#091;],\n    docs: createSwaggerServiceOptions({\n      schemas: { workshopSchema, workshopDataSchema, workshopPatchSchema, workshopQuerySchema },\n      docs: {\n          \/\/ any options for service.docs can be added here\n          description: 'Workshop service',\n      }\n    }),\n  })<\/code><\/pre>\n\n\n\n<p>Don&#8217;t forget to add the necessary imports at the beginning of the file:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import {\n  workshopDataValidator,\n  workshopPatchValidator,\n  workshopQueryValidator,\n  workshopResolver,\n  workshopExternalResolver,\n  workshopDataResolver,\n  workshopPatchResolver,\n  workshopQueryResolver,\n  workshopDataSchema,\n  workshopPatchSchema,\n  workshopQuerySchema,\n  workshopSchema\n} from '.\/workshop.schema'\n\nimport type { Application } from '..\/..\/declarations'\nimport { WorkshopService, getOptions } from '.\/workshop.class'\nimport { workshopPath, workshopMethods } from '.\/workshop.shared'\nimport { createSwaggerServiceOptions } from 'feathers-swagger'<\/code><\/pre>\n\n\n\n<p><strong>Important<\/strong> : in the case of a TypeScript project, the docs property is not recognized. An additional type declaration must therefore be added. In the src\/declarations.ts file, add :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>declare module '@feathersjs\/feathers' {\n  interface ServiceOptions {\n    docs?: ServiceSwaggerOptions;\n  }\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-testing-the-ui\">Testing the UI<\/h2>\n\n\n\n<p>As usual, to test the service, I use the command :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>npm run dev<\/code><\/pre>\n\n\n\n<p>Once the server has been started, simply access the docs page: http:\/\/localhost:3030\/docs\/<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"534\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/03\/Swagger-UI-1024x534.png\" alt=\"Swagger UI methods list\" class=\"wp-image-32001\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/03\/Swagger-UI-1024x534.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/03\/Swagger-UI-300x156.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/03\/Swagger-UI-768x400.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/03\/Swagger-UI-1536x801.png 1536w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/03\/Swagger-UI-2048x1068.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>From the Swagger interface, I can test API methods:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1002\" height=\"1024\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/03\/Swagger-test-1002x1024.png\" alt=\"Swagger UI method test\" class=\"wp-image-32002\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/03\/Swagger-test-1002x1024.png 1002w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/03\/Swagger-test-294x300.png 294w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/03\/Swagger-test-768x785.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/03\/Swagger-test.png 1482w\" sizes=\"auto, (max-width: 1002px) 100vw, 1002px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-conclusion\">Conclusion<\/h2>\n\n\n\n<p>Adding a UI to explore the Feathers.js API is quick and easy, thanks to our ecosystem packages.<\/p>\n\n\n\n<p>Swagger UI is a very useful tool, and adding it to your project is a good idea in many cases, such as :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>When developing the API itself, to test methods and make sure they work properly<\/li>\n\n\n\n<li>For the front-end developer using the API, it&#8217;s easy to know which methods are available and how to use them.<\/li>\n\n\n\n<li>In the case of a public API, users can easily support and test methods using the UI<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-to-continue-with-feathers-js\">To continue with Feathers.js<\/h2>\n\n\n\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/add-authentication-in-a-feathers-js-rest-api\/\">Add authentication in a Feathers.js REST API<\/a><br><a href=\"https:\/\/www.dbi-services.com\/blog\/manage-feathers-js-authentication-in-swagger-ui\/\">Manage Feathers.js authentication in Swagger UI<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Following on from my previous article: Create REST API from your database in minute with Feathers.js, today I want to add a UI to explore the Feathers.js API. When we provide an API, it&#8217;s common to make a tool available to explore the exposed methods.Swagger UI is one such tool, and fortunately, in the Feathers.js [&hellip;]<\/p>\n","protected":false},"author":72,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[368,3029],"tags":[979,1090,1001,3301,3257],"type_dbi":[],"class_list":["post-31966","post","type-post","status-publish","format-standard","hentry","category-development-performance","category-web","tag-api","tag-javascript","tag-node-js","tag-swagger-ui","tag-typescript"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Add a UI to explore the Feathers.js API - dbi Blog<\/title>\n<meta name=\"description\" content=\"Add a tool to explore your Feathers.js REST API. Install and quickly configure Swagger UI on your project !\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/add-a-ui-to-explore-the-feathers-js-api\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Add a UI to explore the Feathers.js API\" \/>\n<meta property=\"og:description\" content=\"Add a tool to explore your Feathers.js REST API. Install and quickly configure Swagger UI on your project !\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/add-a-ui-to-explore-the-feathers-js-api\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-26T13:27:17+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-09-02T07:23:49+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/03\/Swagger-UI-1024x534.png\" \/>\n<meta name=\"author\" content=\"Nicolas Meunier\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nicolas Meunier\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/add-a-ui-to-explore-the-feathers-js-api\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/add-a-ui-to-explore-the-feathers-js-api\/\"},\"author\":{\"name\":\"Nicolas Meunier\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/2e08c09a2f083004587b54128684fefe\"},\"headline\":\"Add a UI to explore the Feathers.js API\",\"datePublished\":\"2024-03-26T13:27:17+00:00\",\"dateModified\":\"2024-09-02T07:23:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/add-a-ui-to-explore-the-feathers-js-api\/\"},\"wordCount\":430,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/add-a-ui-to-explore-the-feathers-js-api\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/03\/Swagger-UI-1024x534.png\",\"keywords\":[\"api\",\"JavaScript\",\"Node.js\",\"Swagger UI\",\"TypeScript\"],\"articleSection\":[\"Development &amp; Performance\",\"Web\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/add-a-ui-to-explore-the-feathers-js-api\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/add-a-ui-to-explore-the-feathers-js-api\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/add-a-ui-to-explore-the-feathers-js-api\/\",\"name\":\"Add a UI to explore the Feathers.js API - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/add-a-ui-to-explore-the-feathers-js-api\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/add-a-ui-to-explore-the-feathers-js-api\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/03\/Swagger-UI-1024x534.png\",\"datePublished\":\"2024-03-26T13:27:17+00:00\",\"dateModified\":\"2024-09-02T07:23:49+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/2e08c09a2f083004587b54128684fefe\"},\"description\":\"Add a tool to explore your Feathers.js REST API. Install and quickly configure Swagger UI on your project !\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/add-a-ui-to-explore-the-feathers-js-api\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/add-a-ui-to-explore-the-feathers-js-api\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/add-a-ui-to-explore-the-feathers-js-api\/#primaryimage\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/03\/Swagger-UI.png\",\"contentUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/03\/Swagger-UI.png\",\"width\":2950,\"height\":1538},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/add-a-ui-to-explore-the-feathers-js-api\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Add a UI to explore the Feathers.js API\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/2e08c09a2f083004587b54128684fefe\",\"name\":\"Nicolas Meunier\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/cc2139acc6c64bddf3827e2faaaa70f227faafc288457fc351a4a836813112a8?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/cc2139acc6c64bddf3827e2faaaa70f227faafc288457fc351a4a836813112a8?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/cc2139acc6c64bddf3827e2faaaa70f227faafc288457fc351a4a836813112a8?s=96&d=mm&r=g\",\"caption\":\"Nicolas Meunier\"},\"description\":\"Nicolas Meunier has more than 20 years of experience in IT web technologies as well as in development. He is specialized in Cloud solutions such as CI\/CD. His expertise also includes Kubernetes, Docker, Jenkins-X and Azure Devops. Florence Porret (FP is IT Consultant in Cloud solutions. Prior to joining dbi services, Nicolas Meunier was developer and maintainer of a CI\/CD pipelines at CEGID in Paris. He also worked as Lead Developer at KPMG. Florence Porret (FP holds a superior technical diploma in IT development. His branch-related experience covers software and cloud platform architecture.\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/nicolasmeunier\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Add a UI to explore the Feathers.js API - dbi Blog","description":"Add a tool to explore your Feathers.js REST API. Install and quickly configure Swagger UI on your project !","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:\/\/www.dbi-services.com\/blog\/add-a-ui-to-explore-the-feathers-js-api\/","og_locale":"en_US","og_type":"article","og_title":"Add a UI to explore the Feathers.js API","og_description":"Add a tool to explore your Feathers.js REST API. Install and quickly configure Swagger UI on your project !","og_url":"https:\/\/www.dbi-services.com\/blog\/add-a-ui-to-explore-the-feathers-js-api\/","og_site_name":"dbi Blog","article_published_time":"2024-03-26T13:27:17+00:00","article_modified_time":"2024-09-02T07:23:49+00:00","og_image":[{"url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/03\/Swagger-UI-1024x534.png","type":"","width":"","height":""}],"author":"Nicolas Meunier","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Nicolas Meunier","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/add-a-ui-to-explore-the-feathers-js-api\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/add-a-ui-to-explore-the-feathers-js-api\/"},"author":{"name":"Nicolas Meunier","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/2e08c09a2f083004587b54128684fefe"},"headline":"Add a UI to explore the Feathers.js API","datePublished":"2024-03-26T13:27:17+00:00","dateModified":"2024-09-02T07:23:49+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/add-a-ui-to-explore-the-feathers-js-api\/"},"wordCount":430,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/add-a-ui-to-explore-the-feathers-js-api\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/03\/Swagger-UI-1024x534.png","keywords":["api","JavaScript","Node.js","Swagger UI","TypeScript"],"articleSection":["Development &amp; Performance","Web"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/add-a-ui-to-explore-the-feathers-js-api\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/add-a-ui-to-explore-the-feathers-js-api\/","url":"https:\/\/www.dbi-services.com\/blog\/add-a-ui-to-explore-the-feathers-js-api\/","name":"Add a UI to explore the Feathers.js API - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/add-a-ui-to-explore-the-feathers-js-api\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/add-a-ui-to-explore-the-feathers-js-api\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/03\/Swagger-UI-1024x534.png","datePublished":"2024-03-26T13:27:17+00:00","dateModified":"2024-09-02T07:23:49+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/2e08c09a2f083004587b54128684fefe"},"description":"Add a tool to explore your Feathers.js REST API. Install and quickly configure Swagger UI on your project !","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/add-a-ui-to-explore-the-feathers-js-api\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/add-a-ui-to-explore-the-feathers-js-api\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/add-a-ui-to-explore-the-feathers-js-api\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/03\/Swagger-UI.png","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2024\/03\/Swagger-UI.png","width":2950,"height":1538},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/add-a-ui-to-explore-the-feathers-js-api\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Add a UI to explore the Feathers.js API"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/2e08c09a2f083004587b54128684fefe","name":"Nicolas Meunier","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/cc2139acc6c64bddf3827e2faaaa70f227faafc288457fc351a4a836813112a8?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/cc2139acc6c64bddf3827e2faaaa70f227faafc288457fc351a4a836813112a8?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/cc2139acc6c64bddf3827e2faaaa70f227faafc288457fc351a4a836813112a8?s=96&d=mm&r=g","caption":"Nicolas Meunier"},"description":"Nicolas Meunier has more than 20 years of experience in IT web technologies as well as in development. He is specialized in Cloud solutions such as CI\/CD. His expertise also includes Kubernetes, Docker, Jenkins-X and Azure Devops. Florence Porret (FP is IT Consultant in Cloud solutions. Prior to joining dbi services, Nicolas Meunier was developer and maintainer of a CI\/CD pipelines at CEGID in Paris. He also worked as Lead Developer at KPMG. Florence Porret (FP holds a superior technical diploma in IT development. His branch-related experience covers software and cloud platform architecture.","url":"https:\/\/www.dbi-services.com\/blog\/author\/nicolasmeunier\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/31966","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/72"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=31966"}],"version-history":[{"count":17,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/31966\/revisions"}],"predecessor-version":[{"id":34633,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/31966\/revisions\/34633"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=31966"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=31966"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=31966"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=31966"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}