<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: APIMatic.io</title>
    <description>The latest articles on DEV Community by APIMatic.io (@apimatic).</description>
    <link>https://dev.to/apimatic</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1067964%2F2c7c4742-61ab-497d-a4d9-bf52eab75b12.jpg</url>
      <title>DEV Community: APIMatic.io</title>
      <link>https://dev.to/apimatic</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/apimatic"/>
    <language>en</language>
    <item>
      <title>API Docs-Bots, Assistants &amp; OpenAPI Auto Fixing</title>
      <dc:creator>APIMatic.io</dc:creator>
      <pubDate>Thu, 04 Apr 2024 22:27:37 +0000</pubDate>
      <link>https://dev.to/apimatic/api-docs-bots-assistants-openapi-auto-fixing-2ain</link>
      <guid>https://dev.to/apimatic/api-docs-bots-assistants-openapi-auto-fixing-2ain</guid>
      <description>&lt;p&gt;Let's look into our crystal ball to see how Docs-Bots, API assistants, and OpenAPI auto-fixing will drive future API adoption.&lt;/p&gt;

&lt;p&gt;2024 marks the first decade of APIMatic incorporation. That’s quite a lot of time being part of this beautiful community of API developer tools and witnessing the API industry evolve. From new API description formats popping up to old ones fading away, from the love of HATEOAS to the rise and fall of microservices, the GraphQL storm, some big acquisitions, and a few sad exits, tech alliances, patent fights, standardization efforts - it’s been an exciting rollercoaster!&lt;/p&gt;

&lt;p&gt;Where will the industry be heading in the future? From the learnings of a company focused on improving the developer experience of both API providers and consumers, we pick three active areas of innovation:&lt;/p&gt;

&lt;h2&gt;
  
  
  1- API Docs-Bots to Massively Reduce Developers’ Onboarding Time
&lt;/h2&gt;

&lt;p&gt;API documentation solutions have come a long way in the past few years. Features like &lt;a href="https://www.apimatic.io/blog/2020/06/the-anatomy-of-api-code-samples" rel="noopener noreferrer"&gt;runnable code samples&lt;/a&gt; and &lt;a href="https://www.youtube.com/watch?v=eQNup8UicHw" rel="noopener noreferrer"&gt;guided walkthroughs&lt;/a&gt; help developers get up and running quickly with an API. Still, a learning curve is involved before a developer can start writing the integration code.&lt;/p&gt;

&lt;p&gt;Generative AI will likely replace the learning curve and long API onboarding steps in the future. For example, instead of going through each endpoint, reading the docs, and writing the code for authentication flow, a developer can ask a query to an “API Docs-Bot” in natural language and get the integration code for the desired use case in a few seconds.&lt;/p&gt;

&lt;h3&gt;
  
  
  What About Code Reliability?
&lt;/h3&gt;

&lt;p&gt;At the moment, Gen-AI is good at generating syntactically correct code, but it lacks an understanding of the semantics. Therefore, a challenge would be training the AI bot to generate production-ready integration code for different scenarios. A couple of ways to solve this problem are using:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;An expert developer&lt;/strong&gt;: to feed detailed prompts to GenAI and keep refining until the integration code of a desired quality level is returned. It is manual and hard to scale.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A sophisticated code generator for APIs&lt;/strong&gt;: to train the AI on the SDK of an API so that its responses are based on deterministically produced code by the code generator.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5p8xnqoqo04y3mskwmhi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5p8xnqoqo04y3mskwmhi.png" alt=" " width="800" height="218"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To test solution # 2, we’ve conducted a few experiments using APIMatic, and the initial results of creating an API Docs-Bot by combining the two machines have been quite promising (see below). Expect to see similar attempts in 2024 by API solution providers.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/EO4plrg7idY"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  2- AI Assistants to let Non-Developers Play with APIs
&lt;/h2&gt;

&lt;p&gt;Developers or non-developers, we all use APIs. The difference is that developers build apps using APIs, while non-developers use APIs via those apps. Moreover, developers can use an API for countless use-cases, while non-developers can only try limited use-cases built in an app by a developer.&lt;/p&gt;

&lt;p&gt;Imagine, I want to know how many times I have been to restaurants in the past 12 months, the total expense, and the average cost per visit. Today, my options are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;to download and look manually into my bank statements or&lt;/li&gt;
&lt;li&gt;find a FinTech app which offers this functionality, or&lt;/li&gt;
&lt;li&gt;get a developer to write an app using OpenBanking APIs.
Later, what if I want to see my top expense categories for the last two years as a graph? Again, I can do it manually or depending on the functionality built by a developer.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The good news is that Gen-AI can remove this dependency, i.e., letting non-developers access an API the way they want without needing a developer in the middle using AI assistants. Because of its conversational nature, the end users can easily provide their input in natural language and further refine the output conversationally if needed. &lt;/p&gt;

&lt;p&gt;In 2024, we expect to see a plethora of AI assistants. However, similar to the API Docs-Bot case, training Gen-AI to reliably access data from an API and convert that into information takes a considerable amount of time. A quicker way would again be to use a code generator to reliably and instantly get the integration code and train the AI to process the data coming through the APIs.&lt;/p&gt;

&lt;p&gt;We experimentally built a financial assistant during the recent holidays using Payments New Zealand’s &lt;a href="https://www.apicentre.paymentsnz.co.nz/" rel="noopener noreferrer"&gt;OpenBanking APIs&lt;/a&gt;. Here are a couple of queries in the screenshot below to depict the outcome (the sandbox data has been expanded to try different scenarios):&lt;/p&gt;

&lt;h2&gt;
  
  
  3- Governance - from OpenAPI Ratings to OpenAPI Fixing
&lt;/h2&gt;

&lt;p&gt;As the significance of API governance and design continues to grow, we see some new tools arriving in the market, focusing on assessing an API's quality through its API definition. Two noteworthy examples include Zuplo's Rate My API and Trebble's API Insights. Both tools audit API definitions against certain standards/conventions and assign them a good/bad score for various categories, including design, security, completeness, and more. By highlighting specific areas of improvement, these tools empower API designers to make their definitions flawless. At APIMatic, we also help API designers improve their definitions for stronger SDK and documentation generation. Following is what an auto-generated audit snapshot of an OpenAPI file with some validation and linting issues usually looks like:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvpbn2xzbaskjzpo728v4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvpbn2xzbaskjzpo728v4.png" alt=" " width="800" height="666"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why is a Flawless API Definition Important?
&lt;/h3&gt;

&lt;p&gt;GIGO (Garbage In, Garbage Out) is a familiar slang in the computer science world, meaning a flawed input would produce a nonsense output. GIGO is perfectly applicable to the processes that need OpenAPI definitions as input. If you're looking to &lt;a href="https://caseysoftware.com/blog/how-chatgpt-will-solve-all-api-problems-except-yours" rel="noopener noreferrer"&gt;feed your OpenAPI definition to GenAI&lt;/a&gt;, want to generate Docs, SDKs, or do anything else, you need to ensure a flawless API definition or don’t mind piling up some garbage.  This problem is not new for API definition files (see some common mistakes from 2018 in &lt;a href="https://www.apimatic.io/blog/2018/03/common-mistakes-developers-make-in-their-openapi-3-files" rel="noopener noreferrer"&gt;OpenAPI&lt;/a&gt;, &lt;a href="https://www.apimatic.io/blog/2018/09/common-mistakes-developers-make-in-their-api-blueprint-files" rel="noopener noreferrer"&gt;APIBlueprint&lt;/a&gt;, and &lt;a href="https://www.apimatic.io/blog/2018/04/common-mistakes-developers-make-in-their-raml-files" rel="noopener noreferrer"&gt;RAML&lt;/a&gt; definitions), but it is growing in magnitude and demands immediate attention. Based on APIMatic users, we saw:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;20% of the total OpenAPI definitions brought to APIMatic violated OpenAPI standards and failed during the import process, whereas&lt;/li&gt;
&lt;li&gt;50% conformed to OpenAPI standards but lacked the elements required to generate viable integration code.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Towards a Future of Auto-Fixing
&lt;/h3&gt;

&lt;p&gt;While an audit report helps identify the issues, somebody still has to fix those problems. This is the hard part due to the time and resources required to rectify a complex OpenAPI definition, especially if one is not too familiar with the syntax. Can AI help with the auto-fixing? Yes, but reliability will remain a question unless somebody pays to train like an LLM. Till then, OpenAPI experts or man-made machines with pre-defined rules will keep on helping the API designers.&lt;/p&gt;

&lt;p&gt;Therefore, in 2024, we expect to see the audit tools moving forward and help designers with (semi) automatically fixing the issues. At APIMatic, we’re running a “&lt;a href="https://www.apimatic.io/blog/2023/10/fix-my-openapi-vs-code-extension" rel="noopener noreferrer"&gt;Fix My OpenAPI&lt;/a&gt;” movement primarily focused on SDK and Docs generation. A free-to-use VS Code extension comes with over 1200 predefined out-of-the-box rules. It ensures strict adherence to API standards and recommends improvements and best practices to enhance one’s API definition. Moreover, the extension has an “auto-fix” feature to help remove some pesky issues with just a few clicks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F41avt9umct87dnp8efdb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F41avt9umct87dnp8efdb.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That’s it for today. Let’s see what new and improved tooling 2024 brings up to help API designers while they curate OpenAPI definitions and how far the Generative-AI wave takes the API space. Feel free to reach out at &lt;a&gt;&lt;/a&gt;&lt;a href="mailto:adeel@apimatic.io"&gt;adeel@apimatic.io&lt;/a&gt; for any feedback or if you want to try out the Gen-AI POCs mentioned in this blog. I also want to acknowledge team APIMatic, especially &lt;a href="https://www.apimatic.io/blog/author/muhammad-saeed" rel="noopener noreferrer"&gt;Saeed&lt;/a&gt;, &lt;a href="https://www.apimatic.io/blog/author/ali-raza" rel="noopener noreferrer"&gt;Ali&lt;/a&gt;, &lt;a href="https://www.apimatic.io/blog/author/faria-rehman" rel="noopener noreferrer"&gt;Faria&lt;/a&gt;, and &lt;a href="https://www.linkedin.com/in/sidmaestre/" rel="noopener noreferrer"&gt;Sidney&lt;/a&gt;, for their valuable input and R&amp;amp;D initiatives.&lt;/p&gt;

</description>
      <category>api</category>
      <category>ai</category>
      <category>documentation</category>
      <category>vscode</category>
    </item>
    <item>
      <title>APIMatic SDKs in Backstage Developer Portal</title>
      <dc:creator>APIMatic.io</dc:creator>
      <pubDate>Wed, 06 Mar 2024 01:59:37 +0000</pubDate>
      <link>https://dev.to/apimatic/apimatic-sdks-in-backstage-developer-portal-3od</link>
      <guid>https://dev.to/apimatic/apimatic-sdks-in-backstage-developer-portal-3od</guid>
      <description>&lt;p&gt;By combining APIMatic’s high-quality idiomatic SDKs with the Backstage developer portal, you can create a compelling and differentiated developer experience. &lt;/p&gt;

&lt;h2&gt;
  
  
  What is Backstage?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://backstage.io" rel="noopener noreferrer"&gt;Backstage&lt;/a&gt; is an open-source platform developed by Spotify for managing the entire lifecycle of developer infrastructure, including services, APIs, documentation, and more. Backstage streamlines the development process through its centralized and customizable platform, offering a unified dashboard that consolidates information on projects, services, and infrastructure. Acting as a service catalog enhances transparency by allowing teams to document and discover internal services easily. Backstage's extensible architecture supports a robust plugin ecosystem, enabling teams to tailor the platform to their specific workflows and preferences. The platform promotes collaboration, accelerates onboarding through standardized documentation, and integrates seamlessly with various DevOps tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  Extending Backstage with SDKs
&lt;/h2&gt;

&lt;p&gt;As the number of services and API complexity grows, teams using Backstage as their developer portal may look to add SDKs to support developers in multiple languages. SDKs include code libraries, documentation, getting-started guides, and code samples, empowering developers to interact seamlessly with APIs and services.&lt;/p&gt;

&lt;p&gt;APIMatic automates the creation and maintenance of SDKs in various programming languages. In this tutorial, we’ll show you how to take your API developer experience to the next level by using APIMatic to generate SDKs and incorporate them into your Backstage portal.&lt;/p&gt;

&lt;p&gt;APIMatic goes above and beyond to ensure a good developer experience by providing auto-generated SDKs in the programming languages you need and includes SDK documentation with guided walkthroughs, code samples, and getting started guides.&lt;/p&gt;

&lt;p&gt;We can integrate APIMatic SDKs by incorporating them into a dedicated SDKs page within existing documentation or by embedding the SDKs documentation as a newly registered component in the Backstage portal. In the upcoming sections, we will explore both options to see how they can improve the developer experience within the backstage portal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Generate SDKs and Documentation with APIMatic
&lt;/h2&gt;

&lt;p&gt;In this section, we walk through publishing an API portal for APIMatic SDKs. If you already have a generated portal with APIMatic, skip to Integrate APIMatic with Backstage section.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://hubl.li/Q02njtD-0" rel="noopener noreferrer"&gt;Start your free trial&lt;/a&gt; with access to all SDK generation features.&lt;/p&gt;

&lt;h3&gt;
  
  
  Import an API definition
&lt;/h3&gt;

&lt;p&gt;Follow these &lt;a href="https://docs.apimatic.io/getting-started/importing-api-spec/" rel="noopener noreferrer"&gt;instructions&lt;/a&gt; to import your existing API definition or use the example &lt;a href="https://gist.github.com/MaryamAdnan3/14186c9c1b0ac5d84b4f48368c7289f1" rel="noopener noreferrer"&gt;Petstore API&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.apimatic.io%2Fhubfs%2Fimage-01.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.apimatic.io%2Fhubfs%2Fimage-01.png" width="512" height="353" alt="import OpenAPI definition into APIMatic"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Generate SDK Portal
&lt;/h3&gt;

&lt;p&gt;Follow these instructions to generate a portal for your SDKs using the API definition you just imported. In the last step, you’ll click “Preview API Portal”. A preview of the default landing page of your portal opens up in a new tab on your browser. From here onwards, you can customize your portal's look, feel, and behavior or publish it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.apimatic.io%2Fhubfs%2Fimage-02-replacement.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.apimatic.io%2Fhubfs%2Fimage-02-replacement.png" width="800" height="415" alt="Generate Petstore Developer Portal"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Publish SDK Portal
&lt;/h3&gt;

&lt;p&gt;Click the Publish Portal button at the bottom of the page and follow &lt;a href="https://docs.apimatic.io/publish-apis/hosting-your-portal/" rel="noopener noreferrer"&gt;these instructions&lt;/a&gt;  to publish a hosted portal.&lt;/p&gt;

&lt;p&gt;Once publishing is complete, visit your unique URL to view your SDK documentation. You can also find the URL in the portal &lt;em&gt;Settings &amp;gt; Publishing&lt;/em&gt; section of the portal editor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integrate APIMatic with Backstage
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Note: This guide assumes you already have an API Documentation portal with Backstage. For more details, visit their &lt;a href="https://backstage.io/docs/getting-started/" rel="noopener noreferrer"&gt;site&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Create a custom page for SDKs
&lt;/h3&gt;

&lt;p&gt;When completed, your Backstage developer portal will include a custom SDK page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.apimatic.io%2Fhubfs%2Fimage-3-replacement.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.apimatic.io%2Fhubfs%2Fimage-3-replacement.png" width="800" height="384" alt="Custom SDK page in backstage developer portal"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After setting up the Backstage platform by following their &lt;a href="https://backstage.io/docs/getting-started/" rel="noopener noreferrer"&gt;getting started guide&lt;/a&gt; you’ll see your instance running at &lt;a href="http://localhost:3000/" rel="noopener noreferrer"&gt;http://localhost:3000/&lt;/a&gt;. Before running the application, ensure that the tech docs configuration section in &lt;br&gt;
&lt;code&gt;app-config.yaml&lt;/code&gt; is configured to run locally.&lt;/p&gt;

&lt;p&gt;The first step is to create a customized page in the Backstage platform. The page will include a list of all the supported language SDKs and links to setup instructions.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;For an overview on the docs-like code solution provided by Backstage, which is responsible for rendering documentation via markdown files, consult the &lt;a href="https://backstage.io/docs/features/techdocs/" rel="noopener noreferrer"&gt;TechDocs&lt;/a&gt; documentation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a markdown file in your application’s doc folder, which you’ll find at &lt;strong&gt;&amp;lt;root folder/docs&amp;gt;&lt;/strong&gt;, and provide a descriptive name &lt;strong&gt;&amp;lt;doc name&amp;gt;.md&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We’ve created a markdown template. Copy the &lt;a href="https://gist.github.com/SidneyAllen/d856f3ef8ac925118bf3ce3f16980aa6#file-sdks-markdown-raw" rel="noopener noreferrer"&gt;markdown from here&lt;/a&gt; and paste it into your markdown file. Note the text is for our Petstore example, so you can customize the text for your API. You must replace the YOUR_DOCS_SLUG and YOUR_API_KEY placeholders with the actual values for your SDK documentation. Detailed instructions are below.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;YOUR_URL_SLUG represents the slug you defined when publishing your APIMatic Portal. To locate this value, hover over the top left corner of your API definition tile in the APIMatic Dashboard and copy the link. You will just need the subdomain of this URL e.g. &lt;a href="https://YOUR_DOCS_SLUG.apimatic.dev" rel="noopener noreferrer"&gt;https://YOUR_DOCS_SLUG.apimatic.dev&lt;/a&gt;. Replace all instances of YOUR_DOCS_SLUG with this value. &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.apimatic.io%2Fhubfs%2Fimage-04.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.apimatic.io%2Fhubfs%2Fimage-04.png" width="474" height="512" alt="Publish Petstore developer portal with APIMatic"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.YOUR_API_KEY represents a unique identifier for your SDK documentation. To access the API Key for your SDK documentation, click the kebab menu (three vertical dots) on the API definition tile to retrieve the API integration key.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;From the context menu, select ‘API Integration Keys’.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.apimatic.io%2Fhubfs%2Fimage-05.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.apimatic.io%2Fhubfs%2Fimage-05.png" width="488" height="512" alt="API keys for APIMatic Developer Portal"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Copy the property titled API KEY. In the markdown template, replace all instances of YOUR_API_KEY with this value.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This concludes your setup for this custom page. Your new page lists all your SDKs. You can save your changes and proceed to the next step.&lt;/p&gt;
&lt;h3&gt;
  
  
  Create a link to the custom SDK page
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Create a &lt;code&gt;mkdocs.yaml&lt;/code&gt; file in your application’s root folder and change it to reference the markdown document in the navigation bar.&lt;/li&gt;
&lt;/ol&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;After running the application successfully, select &lt;strong&gt;Create&lt;/strong&gt; from the navigation bar and press the &lt;strong&gt;REGISTER AN EXISTING COMPONENT&lt;/strong&gt; button.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.apimatic.io%2Fhubfs%2Fimage-06-replacement.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.apimatic.io%2Fhubfs%2Fimage-06-replacement.png" width="800" height="362" alt="Register an existing component in Backstage developer portal"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Import the &lt;code&gt;catalog-info.yaml&lt;/code&gt; file and analyze it on the next page. The catalog-info.yaml file analysis will reveal any problems. Please take care of them before proceeding. You can read more about it &lt;a href="https://backstage.io/docs/features/techdocs/creating-and-publishing" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Provided the previous steps executed smoothly, you will see the &lt;strong&gt;VIEW THE COMPONENT&lt;/strong&gt; button. Pressing this button takes you to a page with the newly created component details. Click on the &lt;strong&gt;DOCS&lt;/strong&gt; tab to view the linked SDK documentation.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.apimatic.io%2Fhubfs%2Fimage-07-replacement.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.apimatic.io%2Fhubfs%2Fimage-07-replacement.png" width="800" height="383" alt="image-07-replacement"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Embed APIMatic’s SDK Documentation in Backstage (Optional)
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;This section is optional because your SDK documentation is already published and publicly accessible; embedding it in your Backstage portal is a nice touch but not a requirement.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In the previous section, we created a page that redirects to the SDK documentation hosted by APIMatic. We can go further and embed the SDK documentation inside a Backstage portal, and it would look like the following.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.apimatic.io%2Fhubfs%2Fimage-08-replacement.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.apimatic.io%2Fhubfs%2Fimage-08-replacement.png" width="800" height="377" alt="Customize homepage tile in Backstage developer portal"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Generate an APIMatic embed script
&lt;/h3&gt;

&lt;p&gt;APIMatic’s SDK Documentation can be embedded in any web page via an embeddable script. To generate the embed script for your APIMatic docs:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to the APIMatic dashboard.&lt;/li&gt;
&lt;li&gt;Locate your API definition tile.&lt;/li&gt;
&lt;li&gt;Click Edit Docs to navigate to the Portal Editor.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.apimatic.io%2Fhubfs%2Fimage-09.png" width="459" height="512" alt="Edit OpenAPI doc in APIMatic"&gt;
&lt;/li&gt;
&lt;li&gt;In the top left corner of the Portal Editor, click the ‘Publish Portal’ button.&lt;/li&gt;
&lt;li&gt;Choose the &lt;em&gt;Update Embedded&lt;/em&gt; option on the next screen.&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.apimatic.io%2Fhubfs%2Fimage-10.png" width="474" height="512" alt="Generate embed code for APIMatic developer portal"&gt;
&lt;/li&gt;
&lt;li&gt;Select the API version you want to generate the embed script for and click Generate Script.&lt;/li&gt;
&lt;li&gt;You will be presented with a snippet containing the script. You need to copy this entire script to use in the next section.&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.apimatic.io%2Fhubfs%2Fimage-11.png" width="495" height="512" alt="Embed Javascript for Developer Portal"&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Add Embed Script to Backstage Portal
&lt;/h3&gt;

&lt;p&gt;In the previous steps, we used APIMatic to create an embed script. Now include it in the Backstage portal.&lt;/p&gt;

&lt;p&gt;First, we’ll create a customized page called SDKs that is accessible from the portal's landing page. This new page displays our embedded portal links to the SDKs.&lt;/p&gt;

&lt;p&gt;To achieve this please follow the instructions given in the Backstage official documentation of customizing the home page.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;We are modifying the default behavior of the application’s home page to link the SDK documentation. Create a new file &lt;code&gt;HomePage.tsx&lt;/code&gt;. This is where our new homepage component will live. It will look like the following:&lt;/li&gt;
&lt;/ol&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;Now create a component with the name &lt;code&gt;ApimaticWidget.tsx&lt;/code&gt; in the components folder of the Backstage application apps folder. This component will load the embedded portal by calling the &lt;em&gt;initializeWidget&lt;/em&gt; method. The method uses the script copied earlier in the previous section.&lt;/li&gt;
&lt;/ol&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;To make the portal accessible through an engaging information card, we will create another component with the name &lt;code&gt;InformationCard.tsx&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;Finally, let's add the routes to the &lt;code&gt;ApimaticWidget&lt;/code&gt; component in &lt;code&gt;App.tsx&lt;/code&gt; to make the customized SDK page accessible from the navigation bar.&lt;/li&gt;
&lt;/ol&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Now we have achieved an interactive and convenient way of making the SDKs even more accessible for the developers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.apimatic.io%2Fhubfs%2Fimage-08-replacement.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.apimatic.io%2Fhubfs%2Fimage-08-replacement.png" width="800" height="377" alt="Backstage.io custom tile on Homepage"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Clicking on Petstore SDKs takes us right to an embedded APIMatic Portal without leaving our Backstage developer portal.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.apimatic.io%2Fhubfs%2Fimage-14-replacement.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.apimatic.io%2Fhubfs%2Fimage-14-replacement.png" width="800" height="379" alt="APIMatic SDKs embedded in Backstage developer portal"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s Next?
&lt;/h2&gt;

&lt;p&gt;In the ever-changing landscape of API-driven development, combining Backstage's API management capabilities with APIMatic's automated SDK generation makes it easy for organizations to establish a strong foundation for API development and consumption.&lt;/p&gt;

&lt;p&gt;If you liked what you saw in this blog, &lt;a href="https://hubl.li/Q02njtD-0" rel="noopener noreferrer"&gt;Sign up for APIMatic&lt;/a&gt; and get started! We would love to see what you build with APIMatic. Tweet your updated Backstage Portals to us at &lt;a href="https://twitter.com/apimatic" rel="noopener noreferrer"&gt;@APIMatic&lt;/a&gt; or drop a mention on &lt;a href="https://www.linkedin.com/company/apimatic-limited/mycompany/" rel="noopener noreferrer"&gt;Linkedin&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>backstage</category>
      <category>sdk</category>
      <category>documentation</category>
      <category>devex</category>
    </item>
    <item>
      <title>Build Go SDKs for your API</title>
      <dc:creator>APIMatic.io</dc:creator>
      <pubDate>Thu, 25 Jan 2024 14:42:00 +0000</pubDate>
      <link>https://dev.to/apimatic/build-go-sdks-for-your-api-773</link>
      <guid>https://dev.to/apimatic/build-go-sdks-for-your-api-773</guid>
      <description>&lt;p&gt;We’re APIMatic.io. We generate strongly typed SDKs along with a complete API reference from OpenAPI definitions. If you want to create an SDK for your REST API, check out how to &lt;a href="https://www.apimatic.io/blog/2022/08/how-to-create-sdks-for-your-api-in-less-than-a-minute" rel="noopener noreferrer"&gt;generate one in under a minute&lt;/a&gt;. We support generating SDKs for C#, Java, PHP, TypeScript, Python, Ruby, and now Golang using the APIMatic Code Generator.&lt;/p&gt;

&lt;p&gt;We are excited to announce that our new Go SDK Code Generator is now available as an alpha release. According to the StackOverflow &lt;a href="https://survey.stackoverflow.co/2023/#most-popular-technologies-language-prof" rel="noopener noreferrer"&gt;Developer Survey 2023&lt;/a&gt;, Go is used by ~14% of professional developers worldwide and is ranked amongst the top most admired languages by developers. Developers appreciate Go for its &lt;a href="https://www.apimatic.io/blog/2023/04/how-gos-simplicity-brings-complexity" rel="noopener noreferrer"&gt;simplicity&lt;/a&gt;, speed, cross-compilation support, concurrency primitives, and expansive standard library. Go developers commonly use it to create distributed network applications, cloud-native services, and standalone tools and utilities. Using the new APIMatic Code Generator, API Providers can now make their APIs accessible to Go developers by generating strongly typed, idiomatic Go SDKs for their API.&lt;/p&gt;

&lt;p&gt;In this blog, we will take a look at the design of the Go SDKs generated by APIMatic. We will especially focus on how they help improve the developer experience, reduce onboarding time, and simplify integration code for API developers. We will also check why APIMatic’s Code Generation solution, especially for Go, stands out among the &lt;a href="https://sdks.io/docs/ways-to-build-sdks/?__hstc=245086810.2dd793be0254e8d39520772b95aca4c2.1699388458843.1705693818058.1705696127258.116&amp;amp;__hssc=245086810.5.1705696127258&amp;amp;__hsfp=3857295638" rel="noopener noreferrer"&gt;various options for creating SDKs&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Quick Tour of the Go SDK
&lt;/h2&gt;

&lt;p&gt;Let’s check out what the new Go SDKs generated by APIMatic Code Generator look like. These examples are from an SDK generated for a model payment API we call IdealPay and help illustrate the Go SDK usage experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  Making an API Call
&lt;/h3&gt;

&lt;p&gt;The Go SDK wraps the API into a Go-native interface while hiding away all the nitty gritty details of making an API call. JSON request and response bodies become Go structs. API calls become method calls. Authentication and error handling are built into the SDK and require minimal effort on the part of the developer to use. All this adds up to a developer experience that reduces the need for the Go developer to go back and forth between the API reference and the code editor as they figure out how to integrate the API into their application.&lt;/p&gt;

&lt;p&gt;Let's check out a code snippet that shows an API call being made using the Go SDK:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvbegzsp29t98msia6e6t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvbegzsp29t98msia6e6t.png" alt=" " width="800" height="1034"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;APIMatic takes a batteries-included approach to the Go SDK design, reducing the effort needed by the API developers to write production-ready code by providing commonly used features such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Concurrency Support&lt;/strong&gt;: The client is designed to be immutable. This allows the client instance to be shared between multiple threads without running into race conditions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Timeout and Retries&lt;/strong&gt;: The SDK is designed to be resilient. Intermittent API call failures are handled by retrying the API calls based on an exponential backup algorithm. Non-responsive HTTP calls are timed out safely to release resources.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context-Aware Calls&lt;/strong&gt;: The SDK allows the caller to pass “context”. This allows the SDK to be used in network applications where an API call might need to be canceled whenever a parent request is canceled.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Working with Request and Response Data
&lt;/h3&gt;

&lt;p&gt;The generated Go SDK provides a strongly typed interface for making API calls by providing Go types for all API requests and responses. In the Go language, this means providing structs, enums, and interface types that help the developers provide the right data to the SDK when making API calls. The Go SDK then converts this data into the right API call by serializing the data as JSON, XML, or form data. However, the developers are oblivious to this detail as the SDK does the heavy lifting of creating the right API call saving the developer from having to read the API reference docs.&lt;/p&gt;

&lt;p&gt;The code snippet below shows the request data being passed to the SDK during an API call. Check out how the Go SDK exposes a neat Go-native interface for handling various request data types:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjr1krl83a9ynmo526ug9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjr1krl83a9ynmo526ug9.png" alt=" " width="800" height="683"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Since the response data is also strongly typed, the Go developer can quickly introspect the response type using their IDE’s auto-complete or type-hint functionality. Check out how VS Code hints at the available properties in the &lt;code&gt;PaymentLink&lt;/code&gt; response:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxvtjzhlf97j6euilgx9u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxvtjzhlf97j6euilgx9u.png" alt=" " width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Strong typing in both request and response helps catch code errors early in the development process by restricting the data types that can be exchanged with the SDK. The compiler raises errors during development which helps the developer correct mistakes, thereby eliminating an entire class of bugs from reaching the production environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Documentation and Code Samples
&lt;/h3&gt;

&lt;p&gt;APIMatic not only generates the Go SDK but also supports creating a complete SDK Reference documentation in the shape of a website. This website contains the following for Go SDK and other generated SDKs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Installation and usage instructions for the SDK&lt;/li&gt;
&lt;li&gt;Endpoint reference&lt;/li&gt;
&lt;li&gt;Request and response type reference&lt;/li&gt;
&lt;li&gt;⭐ Code samples showing API calls using Go SDK&lt;/li&gt;
&lt;li&gt;⭐ API Console to make API calls without leaving the website&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The screenshot below shows a reference documentation site that we have created for a Petstore API, showing documentation for the “Add Pet” endpoint using the Go SDK:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzbpc7r7x6iyfmx9obgjs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzbpc7r7x6iyfmx9obgjs.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Developers can copy the code samples from the documentation into their IDE to quickly integrate the API call into their application. Since these code samples use the Go SDK, they are DRY (&lt;a href="https://en.wikipedia.org/wiki/Don%27t_repeat_yourself" rel="noopener noreferrer"&gt;Don’t repeat yourself&lt;/a&gt;) because they do not embed the entire API call implementation detail inside the code samples; that implementation along with the types needed for requests and responses are provided by the Go SDK.&lt;/p&gt;

&lt;p&gt;While inside the IDE, developers benefit from the IDE “Intellisense” features which help surface the method, types, and documentation for the SDK. This helps speed up the build-and-test development loop for developers, improving developer experience:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fowk4m9odon4xf4wynioz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fowk4m9odon4xf4wynioz.png" alt=" " width="800" height="359"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Choose APIMatic’s Code Generator for Go SDKs?
&lt;/h2&gt;

&lt;p&gt;APIMatic’s newest support for the Go language helps advance our goal of building the most comprehensive platform for crafting API developer experiences. With 8 years of development and millions of SDK downloads under its belt, APIMatic Code Generator represents the most mature solution for API providers to &lt;a href="https://www.apimatic.io/resource/modern-guide-to-building-sdks" rel="noopener noreferrer"&gt;create SDKs for their API Programs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here’s why we think our newest Code Generator for Go SDKs stands out from the crowd:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Designed from scratch for Go&lt;/strong&gt;: APIMatic takes a principled approach to SDK design focusing on creating strongly typed, &lt;a href="https://sdks.io/docs/best-practices/design/idiomatic-code/?__hstc=245086810.2dd793be0254e8d39520772b95aca4c2.1699388458843.1705693818058.1705696127258.116&amp;amp;__hssc=245086810.19.1705696127258&amp;amp;__hsfp=3857295638" rel="noopener noreferrer"&gt;idiomatic SDKs&lt;/a&gt; that make the developers feel at home. Go developers will appreciate the attention to detail we have put into crafting neat types and interfaces in the SDK aligned with Go’s language conventions. This includes the use of the new Generics feature to simplify interfaces, the presence of doc blocks to types and methods, and the locking of dependencies using Go modules.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strong OpenAPI Coverage&lt;/strong&gt;: APIMatic’s Code Generator has expansive support for OpenAPI features, including polymorphic inheritance, multipart requests containing files, nullable and optional types, and authentication schemes such as OAuth 2. Our API Validator helps you get the most out of your OpenAPI definition by finding common issues including hard-to-detect semantic errors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero-maintenance SDKs&lt;/strong&gt;: APIMatic’s approach to SDK generation helps significantly reduce the cost of ownership of SDKs and docs for API providers. Once you’ve published your SDKs, APIMatic will automatically provide updates and security fixes via the &lt;a href="https://www.apimatic.io/blog/2023/06/core-libraries-in-sdks" rel="noopener noreferrer"&gt;Core Libraries&lt;/a&gt; that power our SDKs. Add APIMatic’s &lt;a href="https://www.apimatic.io/solution/no-code-dx" rel="noopener noreferrer"&gt;documentation solution&lt;/a&gt; and you have API and SDK references that stay up-to-date with your latest API definition changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Just like this exciting new release, you can always depend on the APIMatic team to deliver awesome improvements to the SDKs and supporting API tools. Our recent releases include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Complete &lt;a href="https://www.apimatic.io/blog/2023/06/core-libraries-in-sdks" rel="noopener noreferrer"&gt;overhaul of the core functionality&lt;/a&gt; of SDKs resulting in leaner code and easier maintenance.&lt;/li&gt;
&lt;li&gt;New documentation for &lt;a href="https://www.apimatic.io/blog/2023/06/codegen-settings-docs-got-a-makeover" rel="noopener noreferrer"&gt;Code Generation Settings&lt;/a&gt; to help you discover all the ways you can customize your SDKs.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.apimatic.io/blog/2023/05/sdks-for-readme-users" rel="noopener noreferrer"&gt;Integration guide for Readme users&lt;/a&gt; to add SDKs to their documentation sites.&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://www.apimatic.io/blog/2023/04/say-hello-to-sdks-io-a-resource-for-sdk-builders" rel="noopener noreferrer"&gt;community for SDK creators&lt;/a&gt; and developers to learn best practices for building SDKs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Coming soon&lt;/strong&gt;: Expanding support for complex OpenAPI schemas like OneOf and AnyOf.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Coming soon&lt;/strong&gt;: Ability to fix OpenAPI definitions automatically.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So what are you waiting for? Ready, set, Golang! 🎉&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmc0orzpti783ll5jarxw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmc0orzpti783ll5jarxw.png" alt=" " width="428" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can sign up for a &lt;a href="https://hubs.ly/Q02h50ry0" rel="noopener noreferrer"&gt;free 14-day trial of APIMatic&lt;/a&gt; to generate a Go SDK for your API. During the trial, you can generate SDKs and API Documentation in all programming languages supported by the APIMatic platform.&lt;/p&gt;

</description>
      <category>openapi</category>
      <category>sdk</category>
      <category>generator</category>
      <category>go</category>
    </item>
    <item>
      <title>Rev Your Engines: The SDK Generation Race is About to Begin!</title>
      <dc:creator>APIMatic.io</dc:creator>
      <pubDate>Mon, 22 Jan 2024 14:28:00 +0000</pubDate>
      <link>https://dev.to/apimatic/rev-your-engines-the-sdk-generation-race-is-about-to-begin-3cc3</link>
      <guid>https://dev.to/apimatic/rev-your-engines-the-sdk-generation-race-is-about-to-begin-3cc3</guid>
      <description>&lt;p&gt;Hey, speed demons and code maestros! 🚀 Buckle up for an adrenaline-fueled race through the SDK generation landscape featuring the contenders: APIMatic, Speakeasy, and OpenAPI Generator. As a seasoned SDK builder in the API realm, I'm taking these powerhouses for a spin to determine which emerges as the ultimate champion.&lt;/p&gt;

&lt;h2&gt;
  
  
  Today’s Race Schedule
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Pit Stop 1: Validation and Linting&lt;/li&gt;
&lt;li&gt;Building the Car: Code Generation&lt;/li&gt;
&lt;li&gt;Starting Line: Code Compilation&lt;/li&gt;
&lt;li&gt;Test Drive: Code Evaluation&lt;/li&gt;
&lt;li&gt;Victory Lap: Documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, fellow code warriors, fasten your seatbelts and join me. Let's determine which contender will take home the coveted checkered flag in this epic battle of code prowess! 🏁&lt;/p&gt;

&lt;h3&gt;
  
  
  Disclaimer:
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Some modifications were made to Lob’s OpenAPI definition to  prepare for our race. We removed properties that are beta and premium and modified property values that are unique to a specific account, i.e., an ID for an existing object (template, address, etc.). This is advice we would provide a company to create runnable code snippets for all users. The modified version of Lob's OpenAPI definition we used is &lt;a href="https://github.com/SidneyAllen/lob-openapi/tree/sdk-generator-comparison/sdk-generator-comparison" rel="noopener noreferrer"&gt;available here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;APIMatic&lt;/strong&gt;&lt;br&gt;
We found two idempotency keys defined with similar names, Idempotency-Key and idempdency_key, resulting in a duplicate variable. We removed one of the idempotency_key parameters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Speakeasy&lt;/strong&gt;&lt;br&gt;
Three arrays did not have the items attribute defined, so we corrected that and removed a script tag that blocked our test.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OpenAPI Generator&lt;/strong&gt;&lt;br&gt;
The merge_variables default value broke code generation, so we corrected this in our API definition.&lt;/p&gt;

&lt;p&gt;You can put your API definition to the test with APIMatic.&lt;/p&gt;

&lt;p&gt;Start your &lt;a href="https://hubs.li/Q02g-QKy0" rel="noopener noreferrer"&gt;free APIMatic trial today&lt;/a&gt;!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Pit Stop 1: Validation and Linting
&lt;/h2&gt;

&lt;p&gt;In the world of SDK racing, precision is key. Before we hit the track, we're making a pit stop for validation and linting. Which SDK ensures a clean and error-free journey, smoothly navigating Lob's API definition with its oneOf, allOf, and anyOf twists and turns? Let's kick off the race by inspecting their linting and validation prowess.&lt;/p&gt;

&lt;h3&gt;
  
  
  OpenAPI Generator
&lt;/h3&gt;

&lt;p&gt;In testing OpenAPI Generator, I found the validate command wasn’t very useful in surfacing issues. I recommend running the generate command to receive more complete linting and validation. The warnings centered on correcting reserved words, ignoring maxLength, pattern validation, and examples on the requestBody while acknowledging limitations around allOf support. Sadly, the warnings lack line information or suggestions to address these warnings.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv74u42t5bqc4wzstszj5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv74u42t5bqc4wzstszj5.png" alt=" " width="800" height="125"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Speakeasy
&lt;/h3&gt;

&lt;p&gt;Speakeasy also provides a CLI with a validate command that works better than OpenAPI Generator. Their validation results are more readable with line information. Unfortunately, no suggestions for fixing issues are provided. I also received a warning: “X is potentially unused or has been orphaned.” My investigation found these warnings to be false positives.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flir1iyatcztt30nlm0j0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flir1iyatcztt30nlm0j0.png" alt=" " width="800" height="133"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  APIMatic
&lt;/h3&gt;

&lt;p&gt;APIMatic’s validation provides actionable feedback for your API definition to improve code quality. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuvlwh4nr2gr5itl7lyxs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuvlwh4nr2gr5itl7lyxs.png" alt=" " width="800" height="656"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Each warning includes details and links to documentation about the violation with suggestions for fixing it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuuogj1p67gr465o0pmlz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuuogj1p67gr465o0pmlz.png" alt=" " width="800" height="830"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Building the Car: Code Generation
&lt;/h2&gt;

&lt;p&gt;Once the engine is finely tuned, it's time to build the race car. Code generation is our assembly line, where APIMatic, Speakeasy, and OpenAPI Generator vie for the title of the most reliable pit crew. Who constructs the SDK with the precision of a seasoned mechanic? Let's tighten those bolts and see which one builds the meanest machine.&lt;/p&gt;

&lt;p&gt;Comparing SDK code generators in every language can be time-consuming. I’ve found from experience that strongly typed languages like C# and Java are suitable for uncovering issues other languages may let slip by. For this reason, I chose Java to compare the three generators.&lt;/p&gt;

&lt;p&gt;SDK generators will let you pass if your OpenAPI definition is syntactically correct. You can generate code, but you’ll also see warnings that some aspects of your API definition could be problematic. To assist you, code generators will remove or ignore things in your API definition that may interfere with successfully generating code.&lt;/p&gt;

&lt;p&gt;Why do SDK code generators allow you to proceed? It’s a choice that allows you to experience the tool and examine the output without requiring you to spend hours resolving warnings of varying severity.&lt;/p&gt;

&lt;p&gt;Will you want to optimize your API definition before publishing your SDKs? Yes, and &lt;a href="https://marketplace.visualstudio.com/items?itemName=apimatic-developers.apimatic-for-vscode" rel="noopener noreferrer"&gt;APIMatic’s VSCode extension&lt;/a&gt; with 1200 rules specifically around code generation is an excellent tool for the job.&lt;/p&gt;

&lt;p&gt;For those still in the evaluation phase, don’t spend too much time optimizing your API definition, as each code generator enforces slightly different rules; you’ll go crazy trying to please them all.&lt;/p&gt;

&lt;p&gt;Using Lob’s API definition, I successfully generated Java SDKs using each tool.  🎉&lt;/p&gt;

&lt;p&gt;Speakeasy did have the following warnings during code generation.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The component is potentially unused or has been orphaned.&lt;/li&gt;
&lt;li&gt;Only enum types of string or integer are supported. Enum type won't be generated and will be treated as base type&lt;/li&gt;
&lt;li&gt;Enum is nullable but does not contain a null value&lt;/li&gt;
&lt;li&gt;anyOf should only contain types which are compatible with each other, use oneOf if the response can only match one type at a time&lt;/li&gt;
&lt;li&gt;anyOf will not be supported by Speakeasy, treating as oneOf&lt;/li&gt;
&lt;li&gt;missing schema type for X component, but found properties treating as object&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Starting Line: Code Compilation
&lt;/h2&gt;

&lt;p&gt;Engines roar as we move to the starting line. Code compilation is the moment we ignite the fuel and unleash the horsepower. Which SDK delivers a seamless start, ensuring the code compiles with the precision of a pit crew orchestrating a Formula 1 pit stop? The contenders are revved up, and it's time to hit the track.&lt;/p&gt;

&lt;p&gt;APIMatic compiled successfully without any errors or warnings. Unfortunately, both Speakeasy and OpenAPI generators generated SDKs that failed to compile with 32 and 100+ errors, respectively.&lt;/p&gt;

&lt;p&gt;To keep the race going, I got behind Speakeasy’s car and pushed it. From my previous experiment, I found inline headers in the Petstore API broke Speakeasy, so I removed all referenced headers in Lob. To my surprise, the generated Java code with Speakeasy compiled.&lt;/p&gt;

&lt;p&gt;Note: removing API features is not recommended, but it was necessary to continue our race.&lt;/p&gt;

&lt;p&gt;Sadly, I couldn’t get OpenAPI generator past the failed compilation.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Test Drive: Code Evaluation
&lt;/h2&gt;

&lt;p&gt;The rubber meets the road as we take the remaining SDKs for a test drive. Navigating Lob's API definition is our challenging course, filled with oneOf, allOf, and anyOf curves. How well do our contenders handle the heat? We're evaluating the experience of using these SDKs. Can we make that first API call, and is the code idiomatic?&lt;/p&gt;

&lt;p&gt;For this comparison, I created a sample application for APIMatic and Speakeasy to retrieve a list of addresses and print the address's street, city, and zip code.&lt;/p&gt;

&lt;h3&gt;
  
  
  APIMatic
&lt;/h3&gt;

&lt;p&gt;I copied and pasted the code sample from the documentation into my IDE to retrieve a list of addresses. The code ran successfully and retrieved a list of addresses, which was a good sign. The addresses returned can be one of two types: a US or an international one. These models have slightly different properties. For example, the US has zip codes while International addresses don’t. APIMatic’s Java SDK has an address container class with a match method to handle this. Using the match method, I can determine the address type and then access the corresponding data using getters and setters, which is the idiomatic way to interact with models in Java.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h3&gt;
  
  
  Speakeasy
&lt;/h3&gt;

&lt;p&gt;I copied and pasted the provided code sample for the list addresses endpoint from the ReadMe. Running the code, I didn’t receive a list of addresses but a 422 status code. It turns out the code sample provided included malformed parameters. Once I figured out the cause of my 422, I removed the optional parameters and successfully retrieved a list of addresses.&lt;/p&gt;

&lt;p&gt;The address list response uses a generic object to hold the data. Because the data structure is unknown, I utilized a JSON tree structure to traverse and access address details. While the resulting code works, it is a suboptimal experience for Java developers.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;OpenAPI Generator failed to compile and, therefore, was not included in the test drive.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Victory Lap: Documentation
&lt;/h2&gt;

&lt;p&gt;As we approach the finish line, documentation becomes our victory lap. Clear, concise, and user-friendly documentation is like a well-designed pit board guiding you to SDK mastery. APIMatic, Speakeasy, and OpenAPI Generator boast top-notch documentation, but who provides the smoothest ride toward victory? The final stretch is where we evaluate their documentation to determine the true champion of this high-speed SDK race.&lt;/p&gt;

&lt;p&gt;What type of documentation do I include in my comparison? Any docs generated to support the SDK code library, including a getting started guide, SDK reference, code samples, and use case guides.&lt;/p&gt;

&lt;h3&gt;
  
  
  OpenAPI Generator
&lt;/h3&gt;

&lt;p&gt;A ReadMe markdown file is generated with installation information for both Maven and Gradle and a complete code sample as a getting-started guide. The SDK reference generated is a collection of markdown files. That includes the following for each endpoint:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Parameters&lt;/li&gt;
&lt;li&gt;Return type&lt;/li&gt;
&lt;li&gt;Authorization&lt;/li&gt;
&lt;li&gt;HTTP request headers&lt;/li&gt;
&lt;li&gt;HTTP response details&lt;/li&gt;
&lt;li&gt;Complete code sample&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;OpenAPI Generator’s code samples look runnable, but I noticed the create methods would fail as new objects don’t set any initial values.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj1ygi9ubxchpmx9zd88m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj1ygi9ubxchpmx9zd88m.png" alt=" " width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Speakeasy
&lt;/h3&gt;

&lt;p&gt;Speakeasy’s ReadMe only provides Gradle install instructions. A complete code sample is provided as a getting started. The Speakeasy SDK reference is a collection of markdown files and provides fewer details than the OpenAPI Generator.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Parameters&lt;/li&gt;
&lt;li&gt;Response&lt;/li&gt;
&lt;li&gt;Code Sample&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The code samples included in the SDK reference are complete files with import statements. Like OpenAPI Generator, the code samples look runnable, but when testing the listAddress method, the default parameters resulted in a 422 status code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1okjxt8poyxlxnq29obp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1okjxt8poyxlxnq29obp.png" alt=" " width="800" height="686"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  APIMatic
&lt;/h3&gt;

&lt;p&gt;APIMatic’s ReadMe is similar to OpenAPI Generator and Speakeasy, focusing on installing and getting started using the code library. A big difference is the build and installation instructions walk a developer through setting up a sample Eclipse project with the SDK as a dependency.&lt;/p&gt;

&lt;p&gt;In addition to a ReadMe, APIMatic provides a hosted developer portal. The portal includes API reference docs and an SDK reference for each language. It’s easy to navigate and explore the methods, models, enums, and exceptions supported by the SDK.&lt;/p&gt;

&lt;p&gt;The developer portal includes interactive documentation. Modifying property values in the docs update code samples in real-time. You can make live API calls from the documentation, similar to a Postman collection. Lastly, code samples default to a condensed display, but through the config settings, can show a complete runnable code sample. While testing the code sample address list, it ran as expected.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fer07m75qrdgr29hftne1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fer07m75qrdgr29hftne1.png" alt=" " width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In the thrilling race through the SDK generation landscape, we pushed APIMatic, Speakeasy, and OpenAPI Generator to their limits, exploring validation, code generation, compilation, test drive, and documentation. The checkered flag has been waved, and after navigating the twists and turns of Lob's API definition, APIMatic emerges as the undisputed winner of our high-speed showdown.&lt;/p&gt;

&lt;h3&gt;
  
  
  Final Scorecard
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fluxl77kggthzxbvrnna1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fluxl77kggthzxbvrnna1.png" alt=" " width="800" height="412"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To further validate our findings around code generation and compilation, we put ten additional API definitions through these three SDK generators, and the results are below. The yellow warning symbol means there were problems with the languages listed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ufmnwfklysq4yykrndi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ufmnwfklysq4yykrndi.png" alt=" " width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It’s time to put your API definition to the test with APIMatic.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://hubs.li/Q02g-QKy0" rel="noopener noreferrer"&gt;Start your free APIMatic trial!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your 2-week trial gives you access to all features to test the platform’s SDK generation capabilities.&lt;/p&gt;

</description>
      <category>openapi</category>
      <category>generator</category>
      <category>sdk</category>
      <category>codegen</category>
    </item>
    <item>
      <title>New OpenAPI VSCode ext. to Validate, Lint, and Auto-Fix</title>
      <dc:creator>APIMatic.io</dc:creator>
      <pubDate>Mon, 15 Jan 2024 14:27:00 +0000</pubDate>
      <link>https://dev.to/apimatic/new-openapi-vscode-ext-to-validate-lint-and-auto-fix-hd9</link>
      <guid>https://dev.to/apimatic/new-openapi-vscode-ext-to-validate-lint-and-auto-fix-hd9</guid>
      <description>&lt;p&gt;At APIMatic, we process hundreds of thousands of API definitions every year to transform specification formats and generate SDKs and Docs. Interestingly, a big chunk of those API definitions is syntactically correct, but not good enough to generate highly quality code. This is simply because OpenAPI and other popular API specification formats are not built with code generation in mind. We are thrilled to announce the release of our new VS Code extension which comes equipped with over 1200 pre-defined rules to help you effortlessly validate, lint, and auto-fix your API definition files and generate powerful SDKs and documentation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.apimatic.io%2Fhs-fs%2Fhubfs%2Fblog.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.apimatic.io%2Fhs-fs%2Fhubfs%2Fblog.gif" alt="VSCode OpenAPI Linter" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this blog, we will discuss in detail why we built this extension in the first place and how it can help you in your API journey. Or if you're eager to get started with the extension, here's the download link:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.apimatic.io/cs/c/?cta_guid=f1397d84-5ced-498b-aac7-98306ccae344&amp;amp;signature=AAH58kFAIyLSAWSxd8J4TKkl0E1eNYQ-Sw&amp;amp;pageId=141118672670&amp;amp;placement_guid=805f4e2e-3d14-484f-b1c7-dd27e3745362&amp;amp;click=d7fd06f2-c690-4e43-a7a8-71a18465830f&amp;amp;hsutk=2dd793be0254e8d39520772b95aca4c2&amp;amp;canon=https%3A%2F%2Fwww.apimatic.io%2Fblog%2F2023%2F10%2Ffix-my-openapi-vs-code-extension&amp;amp;utm_referrer=https%3A%2F%2Fwww.apimatic.io%2Fblog&amp;amp;portal_id=2052727&amp;amp;redirect_url=APefjpGQDWSHhVmv6qZqGpDa-iSa5vazrVTGtJW3YhWg9EfO2mK6XHyfJY6qVCfZmOvMuouQwX7kMnsu9thyTi-hFEMNAn2vp0EN4zXTXMQXMoKkUsZ9ZuQZ8bWJdl76BiwK93Z8D9x4cUcTpa848y_-9RTn5gf-vft6G1oigodM4PFwMUKXVUCbqkAn4kAyoQFuWQtue9uSKDsWaJcT9u_A23hL6Cj1uJTt-WRm8Ecg5E7tOkAeM7E3BqBJ2UH-Un9wNd1ohnXL4es4NRgyxpA2lx3gPkQznIN8UgOse3bbansjjAwLeS3cSxQ6TXGKqjmbcHFUu_r1pxQEsrR5DQCTwhmEHsPl8Q&amp;amp;__hstc=245086810.2dd793be0254e8d39520772b95aca4c2.1699388458843.1705080345481.1705089640570.98&amp;amp;__hssc=245086810.8.1705089640570&amp;amp;__hsfp=3857295638&amp;amp;contentType=blog-post" rel="noopener noreferrer"&gt;Download from the Visual Studio Marketplace&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Another Validator! But Why?
&lt;/h2&gt;

&lt;p&gt;This has been the most common question we’ve received so far. There are some great tools in the market, but they have a few shortcomings that make them less ideal for users focused on auto-generating SDKs from their API definitions. Those shortcomings include: &lt;/p&gt;

&lt;h3&gt;
  
  
  No dedicated rulesets for code generation
&lt;/h3&gt;

&lt;p&gt;While the existing tools, such as Spectral, have some basic rulesets and plenty of third-party rulesets available in their platform, they do not provide any rulesets out of the box to validate API specifications for code generation purposes.&lt;/p&gt;

&lt;h3&gt;
  
  
  No enforcement of mandatory standard checks
&lt;/h3&gt;

&lt;p&gt;API specification standards like OpenAPI make some rules mandatory using the MUST/REQUIRED keywords. Some of those rules are quite important, but, unfortunately, not all of them are enforced by available tools, possibly to provide greater flexibility.&lt;/p&gt;

&lt;p&gt;Here’s one that disallows keys of reusable components from having anything other than alpha-numeric characters, dashes, periods, and underscores in them:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkjjxqdb95fec5finqjcs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkjjxqdb95fec5finqjcs.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These keys/names play an important role when generating code. However, I’m able to easily get away with any character in my schema name without any related error/warning in Spectral:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmjbgqmwtpwn43rma87t8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmjbgqmwtpwn43rma87t8.png" alt=" " width="800" height="48"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Too much flexibility
&lt;/h3&gt;

&lt;p&gt;All validators including Spectral offer the ability to disable rules as required. In some scenarios, flexibility can be a good thing. But when it comes to generating code, knowing beforehand what rules can negatively affect your output if disabled, can be hard to determine and so this flexibility can be a double-edged sword. You can even end up disabling something important. &lt;/p&gt;

&lt;h3&gt;
  
  
  Missing documentation
&lt;/h3&gt;

&lt;p&gt;Nothing is worse than running into a tricky issue and not having any documentation to help you understand it. Here’s an example of Spectral where documentation is unavailable for some of its messages:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi3po4f0cxgnzebg510sd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi3po4f0cxgnzebg510sd.png" alt=" " width="800" height="162"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  No contextual information for an issue
&lt;/h3&gt;

&lt;p&gt;Sometimes an issue’s message alone cannot convey enough information, especially when it is important to understand “how” that particular issue originated in the first place. None of the existing tools provide any extra information along with its messages.&lt;/p&gt;

&lt;h3&gt;
  
  
  No support for auto-fixing common issues
&lt;/h3&gt;

&lt;p&gt;Several common issues (e.g. inline schemas) often just need simple removal or relocation of certain components in the API definition. Auto-fixing can in such cases greatly reduce the time it takes to bring the API definition to the final shape. Unfortunately, existing tools still lack advanced features like these.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lack of merge-aware validation
&lt;/h3&gt;

&lt;p&gt;API providers looking to release their microservices as a single unified service for consumers require merging their API definitions into one. Ensuring each API definition is valid before and after the merge is a crucial phase that is not supported by any of the tools out there.&lt;/p&gt;

&lt;h3&gt;
  
  
  No support for REST formats other than OpenAPI
&lt;/h3&gt;

&lt;p&gt;Most validators like Spectral focus only on OpenAPI as it is the most popular and widely adopted API specification format. However, we’ve observed that other API specification formats are still in use even if in the minority e.g. RAML, Postman Collections, API Blueprint, WADL, etc. These formats are not supported by any of the popular validators out there.&lt;/p&gt;

&lt;h2&gt;
  
  
  Validation Reimagined - Diving deeper into APIMatic VS Code Extension
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1 - Familiar UI
&lt;/h3&gt;

&lt;p&gt;Visual Studio Code is a platform that millions of developers are already comfortable with. APIMatic’s extension has been built with simplicity and efficiency in mind. It offers you dedicated views in the same familiar environment so you can quickly get started.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flfm3nvp47iv8lbwypplg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flfm3nvp47iv8lbwypplg.png" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2 - Compliance with API specification standards
&lt;/h3&gt;

&lt;p&gt;We enforce all checks marked as mandatory by specification standards like OpenAPI. Such checks are also not configurable. This ensures that your API definition is not only compatible with APIMatic and its products but will work well with other tooling out there as well.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fry4laef8pob27ojxnwdr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fry4laef8pob27ojxnwdr.png" alt=" " width="800" height="245"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In total, we offer 739 validation rules to check compliance, with 329 rules targeting only OpenAPI definitions.&lt;/p&gt;

&lt;h3&gt;
  
  
  3 - Out-of-the-box lint checks for code generation and general quality
&lt;/h3&gt;

&lt;p&gt;To ensure smoother SDK generation, DX portal generation, and API specification format transformation, we lint your API definitions against 542 out-of-the-box lint rules with 503 targeting OpenAPI definitions alone. These checks cover all common issues including prevention of inline schemas, ensuring better naming conventions, etc.&lt;/p&gt;

&lt;p&gt;You can easily configure the lint process as per needs e.g. you can skip certain rules or even entire rulesets, override the default severity of the rules, and even add custom lint rules.&lt;/p&gt;

&lt;h3&gt;
  
  
  4 - Support for auto-fixing common issues
&lt;/h3&gt;

&lt;p&gt;This being one of the unique offerings, our auto-fix feature in the extension lets you remove some pesky issues with just a few clicks:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvmxqkachshp3zeh8v063.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvmxqkachshp3zeh8v063.gif" alt="VS Code OpenAPI auto fix" width="1910" height="978"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As I mentioned earlier, OpenAPI and other formats aren’t designed for code generation. One of the most common issues we see because of this is an abundance of inline anonymous schemas in API definitions that negatively impact SDK and DX portal generation. Most users we encounter who have such definitions are not always familiar with ways to tackle them efficiently. With auto-fixing, we aim to ease their workload by handling such fixes directly in their files, ensuring accuracy and preventing additional issues. This way they can focus on what matters.&lt;/p&gt;

&lt;h3&gt;
  
  
  5 - Richer validation experience
&lt;/h3&gt;

&lt;p&gt;In addition to the basic validation support of showing messages in the Editor and Problems view, our extension also provides dedicated views that enhance your validation experience. These views offer improved issue comprehension and quicker access to the information you need, enabling you to address issues with greater efficiency.&lt;/p&gt;

&lt;h4&gt;
  
  
  Validation Summary View - Get a birds-eye view of all issues
&lt;/h4&gt;

&lt;p&gt;This is a view that shows a complete overview of the validation status of your workspace. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg9ohw03li2kvhfohfnv3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg9ohw03li2kvhfohfnv3.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From here you can:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Navigate easily through all validation messages&lt;/strong&gt; which are &lt;strong&gt;grouped intelligently&lt;/strong&gt; based on severity and whether they are validation or linting messages. Inside these groups, all messages targeting the same issue are grouped, aiding you in addressing all instances of the same issue before moving on to the next. This helps improve the overall efficiency.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generate reports&lt;/strong&gt; in multiple formats (PDF, HTML, Markdown, JSON) for your external stakeholders.&lt;/li&gt;
&lt;li&gt;View an &lt;strong&gt;overall score of your API workspace&lt;/strong&gt; which roughly predicts how good or bad the output that you generate from this API definition is going to be.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Current Position Issues View - See in-depth context for all issues you are currently working with
&lt;/h4&gt;

&lt;p&gt;See the in-depth context for all issues you are currently working with.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnxmmzdhivxm9d36x8gmj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnxmmzdhivxm9d36x8gmj.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This view helps show more context for all issues applicable at the current cursor position in the Editor. The information shown in this view includes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Issue &lt;strong&gt;message&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Severity&lt;/strong&gt; of issue.&lt;/li&gt;
&lt;li&gt;The exact location of the issue in the file with the complete &lt;strong&gt;line number and position range&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;A breadcrumb or JSON reference &lt;strong&gt;path&lt;/strong&gt; to the component.&lt;/li&gt;
&lt;li&gt;Key-value pairs containing contextual metadata to help understand &lt;strong&gt;how and why the issue originated&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;reference call tree&lt;/strong&gt; that shows a nested list of components referencing the current component to help understand &lt;strong&gt;how the issue originated&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Learn More View - Understand what an issue means and its resolution
&lt;/h4&gt;

&lt;p&gt;Developers are all too familiar with issues that leave them scratching their heads in confusion. We understand that time is precious so we allow you to view details of an issue from within the extension in the Learn More view:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F565v0es9w9mdel98fh2q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F565v0es9w9mdel98fh2q.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This includes a detailed description of the issue to help you understand what the issue means and why it occurred as well as hints that can be followed for resolving it. We also list down all relevant external links that can be used to learn more about the issue if needed and much more.&lt;/p&gt;

&lt;h3&gt;
  
  
  6 - Merge-aware validation
&lt;/h3&gt;

&lt;p&gt;APIMatic supports &lt;a href="https://www.apimatic.io/blog/2022/09/auto-merging-apis-and-microservices-specifications-to-ease-api-integration" rel="noopener noreferrer"&gt;merging multiple API definitions&lt;/a&gt;. To ensure a successful merge, it is required that each API definition involved is valid before and after the merge. This is a multi-layer validation process and is supported by our VS Code extension as well.&lt;/p&gt;

&lt;h3&gt;
  
  
  7 - Multiple API specification formats supported
&lt;/h3&gt;

&lt;p&gt;The extension not only supports OpenAPI definitions but also has basic validation support for other API description formats including RAML, API Blueprint, WADL, WSDL, Postman Collections, Insomnia, HAR, etc.&lt;/p&gt;

&lt;h3&gt;
  
  
  8 - Ability to transform API specification format
&lt;/h3&gt;

&lt;p&gt;The extension comes with built-in support for &lt;a href="https://www.apimatic.io/solution/transformer" rel="noopener noreferrer"&gt;API Transformer&lt;/a&gt; allowing you to effortlessly convert your API workspace to your chosen output format. For instance, you can convert from OpenAPI to Postman and more.&lt;/p&gt;

&lt;h3&gt;
  
  
  9 - Better support for APIMatic users
&lt;/h3&gt;

&lt;p&gt;If you are already an APIMatic user, we let you build your API definition from within the extension to check if the API can be successfully exported into APIMatic. Once the API definition is ready, you can easily export it to your APIMatic Dashboard for SDK/DX portal generation without needing to leave the VS Code extension. The extension offers minimal version management as well by letting you replace an existing version or add new versions to the same API group entity.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9310r2cah54s8kcm3aqf.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9310r2cah54s8kcm3aqf.gif" alt="Import from VSCode into APIMatic" width="1818" height="981"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To configure APIMatic processes, you can easily add an APIMatic Metadata file with just a few clicks:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqdltsi82zhx12q2agt2z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqdltsi82zhx12q2agt2z.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We support validating all APIMatic-specific files including custom rulesets, APIMatic Metadata files, etc. so you can avoid any common mistakes.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s next?
&lt;/h2&gt;

&lt;p&gt;The VS Code extension is currently available in preview mode for our APIMatic users. We welcome you to try it out now:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.apimatic.io/cs/c/?cta_guid=f1397d84-5ced-498b-aac7-98306ccae344&amp;amp;signature=AAH58kFAIyLSAWSxd8J4TKkl0E1eNYQ-Sw&amp;amp;pageId=141118672670&amp;amp;placement_guid=805f4e2e-3d14-484f-b1c7-dd27e3745362&amp;amp;click=d7fd06f2-c690-4e43-a7a8-71a18465830f&amp;amp;hsutk=2dd793be0254e8d39520772b95aca4c2&amp;amp;canon=https%3A%2F%2Fwww.apimatic.io%2Fblog%2F2023%2F10%2Ffix-my-openapi-vs-code-extension&amp;amp;utm_referrer=https%3A%2F%2Fwww.apimatic.io%2Fblog&amp;amp;portal_id=2052727&amp;amp;redirect_url=APefjpGQDWSHhVmv6qZqGpDa-iSa5vazrVTGtJW3YhWg9EfO2mK6XHyfJY6qVCfZmOvMuouQwX7kMnsu9thyTi-hFEMNAn2vp0EN4zXTXMQXMoKkUsZ9ZuQZ8bWJdl76BiwK93Z8D9x4cUcTpa848y_-9RTn5gf-vft6G1oigodM4PFwMUKXVUCbqkAn4kAyoQFuWQtue9uSKDsWaJcT9u_A23hL6Cj1uJTt-WRm8Ecg5E7tOkAeM7E3BqBJ2UH-Un9wNd1ohnXL4es4NRgyxpA2lx3gPkQznIN8UgOse3bbansjjAwLeS3cSxQ6TXGKqjmbcHFUu_r1pxQEsrR5DQCTwhmEHsPl8Q&amp;amp;__hstc=245086810.2dd793be0254e8d39520772b95aca4c2.1699388458843.1705080345481.1705089640570.98&amp;amp;__hssc=245086810.8.1705089640570&amp;amp;__hsfp=3857295638&amp;amp;contentType=blog-post" rel="noopener noreferrer"&gt;Download from the Visual Studio Marketplace&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can learn more about each of the extension features &lt;a href="https://docs.apimatic.io/validate-lint-apis/vs-code-apimatic-extension/overview/" rel="noopener noreferrer"&gt;here&lt;/a&gt; and &lt;a href="https://share.hsforms.com/1mgu-bRCIQFGOAzqALfaSbw17zw7?__hstc=245086810.2dd793be0254e8d39520772b95aca4c2.1699388458843.1705080345481.1705089640570.98&amp;amp;__hssc=245086810.8.1705089640570&amp;amp;__hsfp=3857295638" rel="noopener noreferrer"&gt;share any feedback&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Anticipated future changes include, but are not limited to:&lt;/p&gt;

&lt;p&gt;Support for &lt;a href="https://docs.apimatic.io/generate-sdks/overview-sdks/" rel="noopener noreferrer"&gt;generating SDKs&lt;/a&gt; in one or more languages from within the extension.&lt;br&gt;
Support for &lt;a href="https://docs.apimatic.io/publish-apis/api-portal-overview/" rel="noopener noreferrer"&gt;publishing a DX portal&lt;/a&gt; from within the extension.&lt;br&gt;
Improvements to stability.&lt;/p&gt;

</description>
      <category>openapi</category>
      <category>lint</category>
      <category>api</category>
      <category>validation</category>
    </item>
    <item>
      <title>Enhance Redocly with SDKs from APIMatic</title>
      <dc:creator>APIMatic.io</dc:creator>
      <pubDate>Fri, 12 Jan 2024 20:31:20 +0000</pubDate>
      <link>https://dev.to/apimatic/enhance-redocly-with-sdks-from-apimatic-2ed5</link>
      <guid>https://dev.to/apimatic/enhance-redocly-with-sdks-from-apimatic-2ed5</guid>
      <description>&lt;p&gt;Redocly is a popular developer documentation platform with support for a developer portal and API docs with a developer-friendly workflow for creating and maintaining documentation. In this article, we’ll focus on how to extend Redocly’s API Docs tool by incorporating SDKs generated by APIMatic.&lt;/p&gt;

&lt;p&gt;At APIMatic, we generate strongly typed SDKs along with language-specific documentation and code samples, all built from OpenAPI definitions.&lt;/p&gt;

&lt;p&gt;In this post, we’ll look at how APIMatic-generated SDKs can be embedded into Redocly’s API Reference solution to elevate the API Integration experience for your developers. This screenshot shows what we are going to build in this tutorial:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgkjfxwxpuqc3bjmrmmb8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgkjfxwxpuqc3bjmrmmb8.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This article assumes you have already signed up to Redocly, set up your GitHub repository, connected it to Redocly’s API registry and added your API definition to the registry. If not then follow the &lt;a href="https://redocly.com/docs/api-registry/guides/api-registry-quickstart/" rel="noopener noreferrer"&gt;Redocly API registry quickstart guide&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Generate SDKs and documentation
&lt;/h2&gt;

&lt;p&gt;It’s easy to get started with APIMatic, just follow the steps below. If you already have a generated portal with APIMatic, skip to the next section.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.apimatic.io/account/register" rel="noopener noreferrer"&gt;Sign up&lt;/a&gt; for your APIMatic account.&lt;/li&gt;
&lt;li&gt;Follow these steps to &lt;a href="https://docs.apimatic.io/getting-started/importing-api-spec/" rel="noopener noreferrer"&gt;Import your API definition&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Once imported, click the Generate button and then click Proceed.&lt;/li&gt;
&lt;li&gt;This will open a window. Click on the Preview API Portal.&lt;/li&gt;
&lt;li&gt;You will be redirected to a new window to preview your generated SDK documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2lsh9rsmlaq8dos0phso.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2lsh9rsmlaq8dos0phso.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Publish your SDK documentation
&lt;/h2&gt;

&lt;p&gt;Next, publish your SDK documentation so it is publicly accessible. Click the &lt;strong&gt;Customize&lt;/strong&gt; button on the banner that appears at the bottom of your screen.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on the Publish Portal button on the top right of the Portal Editor.&lt;/li&gt;
&lt;li&gt;You will be prompted to select a hosted or embedded portal. Select the Hosted option.&lt;/li&gt;
&lt;li&gt;Select the API version for which you want to publish this documentation and click Next.&lt;/li&gt;
&lt;li&gt;You need to provide a slug where this documentation will be hosted. The slug can contain one or more words separated by a dash “–“. Provide a unique slug in the textbox and click the Save &amp;amp; Next button.&lt;/li&gt;
&lt;li&gt;With your unique URL set up, click the &lt;strong&gt;Publish&lt;/strong&gt; button to initiate the publishing process. You’ll receive an email notification as soon as the process is complete.&lt;/li&gt;
&lt;li&gt;Once publishing is complete, visit your unique URL to view your SDK documentation. You can also find the URL in the portal Settings &amp;gt; Publishing section of the portal editor.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgfnceerihu06diecjfkr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgfnceerihu06diecjfkr.png" alt=" " width="800" height="182"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  SDKs in your Redocly API Docs
&lt;/h2&gt;

&lt;p&gt;Let’s insert APIMatic SDKs into your Redocly API docs.&lt;/p&gt;

&lt;p&gt;Redocly API docs render the main description of an API definition as a separate section. We will leverage this capability to create an SDK section at the beginning of our API Docs.&lt;/p&gt;

&lt;p&gt;Open your Redocly Source Directory and navigate to your OpenAPI Description file. If you used the sample GitHub Repository provided by Redocly, this should be the &lt;code&gt;openapi/openapi.yaml&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcy3r8s8s6f484vg61kwb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcy3r8s8s6f484vg61kwb.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Find the &lt;code&gt;info -&amp;gt; description&lt;/code&gt; property and determine if the value is provided inline or contains a &lt;code&gt;$ref&lt;/code&gt; link to a separate markdown file. In the case of the latter, you can skip down to use our API description template.&lt;/p&gt;

&lt;p&gt;Create a new markdown page in your repository named &lt;code&gt;api-description.md&lt;/code&gt; inside the &lt;code&gt;openapi/&lt;/code&gt; directory.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk3y3ewc4fzbhye7un86c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk3y3ewc4fzbhye7un86c.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Copy the &lt;code&gt;info -&amp;gt; description&lt;/code&gt; value from the OpenAPI spec file and paste it into the newly created &lt;code&gt;api-description.md&lt;/code&gt; file to retain the original description.&lt;/p&gt;

&lt;p&gt;Now update the &lt;code&gt;info -&amp;gt; description&lt;/code&gt; property in the OpenAPI spec by adding a $ref property to it with the correct path to the &lt;code&gt;api-description.md&lt;/code&gt; file as shown in the screenshot below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcv7xkj7wcypewardxtkj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcv7xkj7wcypewardxtkj.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  API Description Template
&lt;/h3&gt;

&lt;p&gt;We’ve created a markdown template to help you add your APIMatic SDKs to your Redocly API Docs. Copy the contents of the &lt;a href="https://gist.github.com/sohaibtariq/345c5bf063ca7bf539119ac45f260a7e#file-sdks-markdown-raw" rel="noopener noreferrer"&gt;template&lt;/a&gt; from here and paste them inside the &lt;code&gt;api-description.md&lt;/code&gt; file after your original description text.&lt;/p&gt;

&lt;h2&gt;
  
  
  Customize API Description Markdown
&lt;/h2&gt;

&lt;p&gt;You will now need to replace the YOUR DOCS SLUG and YOUR API KEY placeholders with the actual values for your SDK documentation.&lt;/p&gt;

&lt;p&gt;Detailed instructions for doing this are listed below:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;YOUR_DOCS_SLUG represents a part of the URL where your APIMatic Portal is published. To retrieve this value, hover over the top left corner of your API definition tile in the APIMatic Dashboard and copy the link that appears. You will just need the last section of this URL e.g. &lt;a href="https://www.apimatic.io/apidocs/YOUR_DOCS_SLUG" rel="noopener noreferrer"&gt;https://www.apimatic.io/apidocs/YOUR_DOCS_SLUG&lt;/a&gt;. Replace all instances of YOUR_DOCS_SLUG in the &lt;code&gt;api-description.md&lt;/code&gt; file with this value.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feecd6hnmpw1u2gfl6lvk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feecd6hnmpw1u2gfl6lvk.png" alt=" " width="408" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;YOUR API KEY represents a unique identifier for your SDK documentation. In order to access the API Key for your SDK documentation, click the kebab menu (three vertical dots) on the API definition tile to retrieve the API integration key.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcam1iu9o8p838qtmnrql.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcam1iu9o8p838qtmnrql.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;From the context menu, select API Integration Keys.&lt;/li&gt;
&lt;li&gt;Copy the property titled API KEY. In the &lt;code&gt;api-description.md&lt;/code&gt; file, replace all instances of YOUR API KEY with this value.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This concludes the steps required to add an SDK section to your API Documentation. Commit your changes and push them to GitHub. &lt;/p&gt;

&lt;p&gt;Redocly will automatically build the API docs based on your changes. Once the build process is complete, you can view the API docs and see the published changes. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8vei3876v9rxlbgtdkf1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8vei3876v9rxlbgtdkf1.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🎉 Congratulations, you have successfully embedded APIMatic SDKs inside your Redocly API Docs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The foundation of a good API program is documentation. As your developer audience expands, the need for an SDK program becomes a priority. It’s great to have flexibility when choosing from an array of tools to build your overall developer experience.&lt;/p&gt;

&lt;p&gt;APIMatic provides an extensible code generation solution that works with virtually every documentation solution on the market. If you’ve liked what you read, sign up for a free 14-day trial of &lt;a href="https://www.apimatic.io/account/register" rel="noopener noreferrer"&gt;APIMatic&lt;/a&gt; and get started! &lt;/p&gt;

&lt;p&gt;We would love to see what you build. Tweet your updated Redocly docs to us at &lt;a href="https://twitter.com/APIMatic" rel="noopener noreferrer"&gt;@APIMatic&lt;/a&gt; or drop a mention on &lt;a href="https://www.linkedin.com/company/apimatic-limited/" rel="noopener noreferrer"&gt;Linkedin&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>api</category>
      <category>openapi</category>
      <category>documentation</category>
      <category>sdk</category>
    </item>
    <item>
      <title>Introducing the Art of Developer Experience Podcast</title>
      <dc:creator>APIMatic.io</dc:creator>
      <pubDate>Tue, 23 May 2023 01:29:00 +0000</pubDate>
      <link>https://dev.to/apimatic/introducing-the-art-of-developer-experience-podcast-10i1</link>
      <guid>https://dev.to/apimatic/introducing-the-art-of-developer-experience-podcast-10i1</guid>
      <description>&lt;p&gt;What the heck is “Developer Experience in 2023?” This is one of the questions we ask our guests (of course more politely) to see what they think. It’s a fairly new term and one with competing definitions depending on the group using it.&lt;/p&gt;

&lt;p&gt;Our guests are from leading technology companies and they join me, Sid Maestre, to have authentic conversations about the challenges of creating products for a technical audience (often APIs) and discuss how DX is evolving. We dive into topics like API design, documentation, SDKs, tooling, developer relations, dashboards, metrics, and more.&lt;/p&gt;

&lt;p&gt;We hope to spark ideas for ways you can improve the developer experience at your company. &lt;/p&gt;

&lt;p&gt;Listen on popular Podcast platforms&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://open.spotify.com/show/2MS2PLJguybMvhj04oLJ88" rel="noopener noreferrer"&gt;Spotify Podcasts&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://podcasts.apple.com/us/podcast/the-art-of-developer-experience-podcast/id1685931474" rel="noopener noreferrer"&gt;Apple Podcast&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="https://music.amazon.com/podcasts/a4bff122-f314-40f9-aee7-f66d26673440" rel="noopener noreferrer"&gt;Amazon Music&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In our &lt;a href="https://www.apimatic.io/art-of-developer-experience/podcast-richard-fortune/" rel="noopener noreferrer"&gt;first episode&lt;/a&gt; we ask Richard Fortune who spent the better part of a decade working on Xero’s developer platform what is developer experience.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;When I join a new organization or introduce someone to an organization, they often have a lot of questions around what developer experience is. If you Google it, you’ll find it defined as UX for developers, but I think it’s a bit blurrier than that in the real world.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;For me, developer experience is all about the journeys that people take when trying to connect to systems. As someone who has worked on the platform side repeatedly, I think it’s important to make that journey as easy as possible to help developers achieve success quickly. It’s important to consider what role they are playing when they’re building with you on that particular day, and that’s a really important first step. If you do that well enough on the first cut, it’s important to do it repeatedly on all the other stages of the journey. This really works well when you have additional offerings later on as well.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In &lt;a href="https://www.apimatic.io/art-of-developer-experience/podcast-brian-rinaldi/" rel="noopener noreferrer"&gt;episode two&lt;/a&gt;, Brian Rinaldi from Launch Darkly shares his thoughts on the term developer experience.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I completely agree that developer experience is a broad and vague term and it varies from company to company. At LaunchDarkly, my focus as a developer experience engineer is to make it easier for developers to onboard and use our product. This includes providing resources and tools to help streamline the process and improve the learning curve. Documentation is a significant aspect of developer experience, and I contribute to our docs even though we have a dedicated docs team. While some companies may focus more on developing tools to ease the onboarding process, my role is more content-focused.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We chatted with Luke Kilpatrick in &lt;a href="https://www.apimatic.io/art-of-developer-experience/podcast-luke-kilpatrick/" rel="noopener noreferrer"&gt;episode three&lt;/a&gt; and addressed the elephant in the room with two diverging definitions of the term developer experience.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The concept of developer experience has evolved into two different flavors. The first is external-facing, focused on helping external adopters of a company’s API, tool or ecosystem through developer marketing and relations. The second flavor, focused internally, has emerged from companies like Netflix and is aimed at improving the developer’s experience in writing code and getting it into the CI/CD pipeline. This includes onboarding and platform engineering. While this is a positive development, it has caused some confusion about what developer experience is and what directors of developer experience do.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>dx</category>
      <category>developer</category>
      <category>podcast</category>
    </item>
    <item>
      <title>How Go’s Simplicity Brings Complexity</title>
      <dc:creator>APIMatic.io</dc:creator>
      <pubDate>Tue, 02 May 2023 19:00:00 +0000</pubDate>
      <link>https://dev.to/apimatic/how-gos-simplicity-brings-complexity-2lj2</link>
      <guid>https://dev.to/apimatic/how-gos-simplicity-brings-complexity-2lj2</guid>
      <description>&lt;p&gt;&lt;a href="https://go.dev/" rel="noopener noreferrer"&gt;Golang&lt;/a&gt;, aka Go, is a modern programming language known for its simplicity, ease of use, and ability to handle high-concurrency tasks. However, this simplicity can sometimes bring complexity to the code you write. As a software developer, I learned this while delving deeper into coding with Go. &lt;/p&gt;

&lt;p&gt;Transitioning to a new programming language can be challenging, and Go is no exception. In this article, I’ll explore some of the challenges I faced when migrating to Go from another language. &lt;/p&gt;

&lt;h2&gt;
  
  
  Navigating the Unintended Complexity in Go
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Go-ing Beyond Static Typing: Implementing Polymorphism
&lt;/h3&gt;

&lt;p&gt;The most prominent area (in my experience) where Golang’s simplicity can cause complexity is in polymorphism. Other languages, like .NET, easily implement polymorphism using classes that inherit from a base class. But in Go, things work a little differently.&lt;/p&gt;

&lt;p&gt;While Go has polymorphism, it is limited to interfaces only. This means developers have to create interfaces for every structure they build and make sure each class implements those interfaces. This introduces complexity when dealing with polymorphic JSON structures.&lt;/p&gt;

&lt;p&gt;I encountered complexity while implementing templates for generating APIMatic’s Golang client SDKs. API definitions with inheritance in their model structures require generated code that supports inheritance and polymorphism. It was a challenging task to work with arrays of polymorphic objects, but I discovered that using custom unmarshaling with a discriminator could help. This discriminator tells the unmarshaller which type of object it is dealing with, so it can convert the interface type into the correct object type and then call that object unmarshaller. unmarshal it.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Great Error Hunt in Go
&lt;/h3&gt;

&lt;p&gt;Beyond polymorphism, there are other factors making the switch to Go a challenge. For example, Go has a unique style of handling errors. Instead of throwing simple exceptions like other languages, Golang uses multiple return values and error codes. This means an error propagates till it reaches the code that invoked it. This approach leads to more explicit error handling, but it is more verbose and requires implementation of additional error-handling logic. &lt;/p&gt;

&lt;p&gt;To illustrate, let’s look at some code with error handling.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// GetLocationById returns Location Coordinates
// if the ID provided is valid else returns an error.

func GetLocationById(id int) (*Coord, error) {
    if id &amp;gt; 0 &amp;amp;&amp;amp; id &amp;lt; 10 {
        return &amp;amp;Coord{1, 2}, nil
    }
    return nil, errors.New("unknown id")
}

func main() {
    coord, err := GetLocationById(344)
    if err != nil {
        fmt.Println("An error occurred: ", err)
        return
    }
    fmt.Println("Got the coordinates: ", coord)
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Smelly Garbage Collection in Go
&lt;/h3&gt;

&lt;p&gt;Among popular server-side programming languages, Go is unique in its use of a garbage collector to manage memory. This is an example of Golang providing simplicity to developers. While garbage collection makes memory management easier for developers, it also exposes risks of performance issues. If not managed properly, garbage collection can introduce additional overhead and latency. This is complexity for developers who write low-latency applications. &lt;/p&gt;

&lt;h3&gt;
  
  
  Perils of Go’s Dependency Management System
&lt;/h3&gt;

&lt;p&gt;Go does not have a central dependency management system like other languages, and developers typically load dependencies straight from GitHub or any public platform. This makes it simple to work with, but you may spend more time searching for the right package to use.&lt;/p&gt;

&lt;h2&gt;
  
  
  It isn’t all bad..
&lt;/h2&gt;

&lt;p&gt;While Go’s simplicity can create complexity in some areas, there are still many things to love.&lt;/p&gt;

&lt;h3&gt;
  
  
  Simplicity in Access Modifiers
&lt;/h3&gt;

&lt;p&gt;I appreciate Golang’s simplicity when it comes to variable access modifiers. Unlike other languages, there are no specific access modifier keywords in Go. Instead, Go has a simple approach to access modifiers: capitalized means public and un-capitalized means private (outside package). This makes it easy to understand and manage the visibility of your code. Here’s an example of how simple access modifiers are in Golang:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// There are only 2 access modifiers in Go; Exported(public) and Unexported(private).

type Sample struct {
    PublicField   bool    // Public/Exported fields in Go have capitalized field names
    privateField  string  // Private/Unexported fields in Go have lowercased first letter of the field name
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This simple naming convention ensures their code is easy to read and maintain, while still maintaining strong encapsulation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Go Generics: The Gift that Keeps on Giving
&lt;/h3&gt;

&lt;p&gt;In early 2022, Golang developers released &lt;a href="https://go.dev/blog/intro-generics" rel="noopener noreferrer"&gt;Go generics&lt;/a&gt;, which takes a lot of boilerplate code away, making code simpler and easier to work with. This feature allows developers to work with any type of data in a more efficient way.&lt;/p&gt;

&lt;h3&gt;
  
  
  Go’s Multiple Returns for Cleaner Code
&lt;/h3&gt;

&lt;p&gt;One of the distinctive features of Go is the ability to return multiple values from a function. This allows developers to write clean and concise code that can handle multiple errors or return multiple values without having to resort to using structures or other data types.&lt;/p&gt;

&lt;p&gt;This feature is particularly useful in error handling, where a function can return both a result and an error value at the same time, reducing the need for error-checking code throughout the application.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type Coord struct {
    Latitude  int
    Longitude int
}

// GetLocationById returns Location Coordinates
// if the ID provided is valid else returns an error. 

func GetLocationById(id int) (*Coord, error) {
    if id &amp;gt; 0 &amp;amp;&amp;amp; id &amp;lt; 10 {
        return &amp;amp;Coord{1, 2}, nil
    }
    return nil, errors.New("unknown id")
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Code Styling is FTW!
&lt;/h3&gt;

&lt;p&gt;Go has a built-in tool called &lt;a href="https://go.dev/blog/gofmt" rel="noopener noreferrer"&gt;gofmt&lt;/a&gt;, which automatically formats code according to Go conventions. This makes it easy for developers to write clean, consistent code without having to worry about manually formatting it. Additionally, the Go vet tool can help identify subtle issues in code such as unreachable code areas. This helps developers catch errors early on and ensures their code adheres to Go's strict coding standards.&lt;/p&gt;

&lt;h3&gt;
  
  
  Go-odbye Unused Variables
&lt;/h3&gt;

&lt;p&gt;One of the key benefits of Go is its efficient memory management. Golang's compiler does not allow unused variables in the code, which saves a lot of memory. This means developers cannot accidentally declare dead variables in their code which would consume memory. This helps reduce memory usage and ensure your Go applications run efficiently.&lt;/p&gt;

&lt;h2&gt;
  
  
  It's Time to Go Now
&lt;/h2&gt;

&lt;p&gt;Working with Go programming language has come with its fair share of challenges. However, I've relished the simplicity and efficiency that this language offers, enabling me to tackle complex tasks with ease. Now, with the power of Go generics, I'm beyond excited to get my hands on this new toolset, which I believe will revolutionize the way I approach coding.&lt;/p&gt;

&lt;p&gt;Check out &lt;a href="https://www.apimatic.io/blog/" rel="noopener noreferrer"&gt;APIMatic blog&lt;/a&gt; section for more informative reads.&lt;/p&gt;

</description>
      <category>go</category>
      <category>programming</category>
      <category>productivity</category>
      <category>learning</category>
    </item>
    <item>
      <title>Launching SDKS.io — A Place for SDK Builders</title>
      <dc:creator>APIMatic.io</dc:creator>
      <pubDate>Thu, 20 Apr 2023 16:15:00 +0000</pubDate>
      <link>https://dev.to/apimatic/launching-sdksio-a-place-for-sdk-builders-3lg5</link>
      <guid>https://dev.to/apimatic/launching-sdksio-a-place-for-sdk-builders-3lg5</guid>
      <description>&lt;p&gt;Photo by &lt;a href="https://unsplash.com/es/@corinnekutz?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Corinne Kutz&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/tMI2_-r5Nfo?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this article, we’ll introduce you to &lt;a href="https://sdks.io/docs/introduction/" rel="noopener noreferrer"&gt;sdks.io&lt;/a&gt;, why we built it, and our hopes for the future.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are SDKs
&lt;/h2&gt;

&lt;p&gt;SDKs (software development kits) are collections of software development tools and resources that allow developers to create applications for a specific platform or operating system. SDKs can include libraries, sample code, and documentation, among other resources.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why SDKs are important
&lt;/h2&gt;

&lt;p&gt;SDKs are important for developers because they abstract away complexity and reduce the amount of code a developer needs to write when integrating with APIs. Companies provide these pre-built components and tools as SDKs making it easier for developers to build robust and feature-rich applications.&lt;/p&gt;

&lt;p&gt;Additionally, SDKs can provide developers with support and documentation, which helps them troubleshoot issues and ensure their application is working as intended. This can be especially useful for developers who are new to a platform or who are unfamiliar with its specific tools and resources.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is SDKs.io
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://sdks.io/docs/introduction/" rel="noopener noreferrer"&gt;SDKs.io&lt;/a&gt; is a site dedicated to improving the state of SDK development. &lt;a href="https://www.apimatic.io/" rel="noopener noreferrer"&gt;APIMatic&lt;/a&gt; has years of experience building SDKs for leading technology companies and our staff includes those who’ve managed SDK programs for API providers. We brought our combined experience together to establish a set of best practices developers can use to build SDKs for consuming RESTful APIs.&lt;/p&gt;

&lt;p&gt;At SDKs.io we cover subjects such as design considerations before you start building, guidelines for constructing code libraries, and recommendations for supporting developers through different types of documentation. With this information teams are better equipped to provide software that serves their developer community.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fubyv1phwz81zaq739t7e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fubyv1phwz81zaq739t7e.png" alt="SDKS.io - home of best practices for building SDKs" width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Best Practices
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://sdks.io/docs/category/design" rel="noopener noreferrer"&gt;design section&lt;/a&gt; helps teams think big picture and establish guidelines for developing code libraries that are the foundation for an SDK. In preparation, you’ll consider the programming languages and frameworks to support, does your API work for both client and server-side libraries, should you utilize code generation, and should you open source your SDK code. We discuss the importance of idiomatic code and naming conventions and how annotations can be used to power code completion in developer IDEs.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://sdks.io/docs/category/build" rel="noopener noreferrer"&gt;build section&lt;/a&gt; dives deep into the details of building code libraries for APIs. We cover topics such as authentication, translating endpoints into methods, data models, logging, persistent connections, timeouts &amp;amp; retries, and much more. All with an eye towards abstracting away complexity and reducing the amount of code a developer needs to write when integrating with your API.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://sdks.io/docs/category/support" rel="noopener noreferrer"&gt;support section&lt;/a&gt; focuses on ways to support developers through different documentation formats. We look at the pros and cons of open sourcing your code libraries and how to support your SDK users in online forums and through traditional support teams.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ways to Build
&lt;/h2&gt;

&lt;p&gt;We are advocates of code generation and do a deep dive into &lt;a href="https://sdks.io/docs/ways-to-build-sdks/code-generation/" rel="noopener noreferrer"&gt;OpenAPI generator and APIMatic&lt;/a&gt; to show developers how to evaluate these types of solutions. We do our best to examine the tradeoffs between &lt;a href="https://sdks.io/docs/ways-to-build-sdks/code-generation/build-vs-buy" rel="noopener noreferrer"&gt;building vs. buying&lt;/a&gt; a code generation solution. Of course, &lt;a href="https://sdks.io/docs/ways-to-build-sdks/homegrown" rel="noopener noreferrer"&gt;homegrown SDKs&lt;/a&gt; may be the best way to serve your developer community, and we expect the best practices can help teams who take this approach. We also touch on ways to engage with developers who’ve built their own code libraries and made them available to your community.&lt;/p&gt;

&lt;h2&gt;
  
  
  SDK Research
&lt;/h2&gt;

&lt;p&gt;Lastly, we’ve kicked off &lt;a href="https://sdks.io/docs/industry-sdk-research" rel="noopener noreferrer"&gt;SDK industry research&lt;/a&gt; to better understand the SDK programs of leading technology companies. By observing trends and sharing insights we can understand the state of SDK development.&lt;/p&gt;

&lt;p&gt;You’ll definitely want to watch this space for interesting insights. For example, we discovered a vast array of programming languages are supported by companies. 18 languages were represented in our SDK survey with JavaScript/TypeScript being the most popular, followed by Python, Java, and Ruby. PHP barely edged out C# for 5th place. A signal of the shifting landscape, Go makes a strong showing in our programming language list along with Swift and Kotlin.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqb7rbu9odwtogv7mslrs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqb7rbu9odwtogv7mslrs.png" alt="SDK Language Popularity" width="800" height="466"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why did we create SDKs.io
&lt;/h2&gt;

&lt;p&gt;Knowledge about SDK development is out there but tends to be scattered across blog posts written by teams who’ve built SDKs and are not intended to be a guide or a gathering place for the community of SDK builders.&lt;/p&gt;

&lt;p&gt;Our aim is to provide a space where builders can share their triumphs and failures on the road to providing a better developer experience. There is no guide to building SDKs and you have to start somewhere, so we started with our experiences and learnings in the space.&lt;/p&gt;

&lt;p&gt;This is an ongoing project and will get better over time. We don’t have all the answers and invite others to contribute their stories and experiences building SDKs. We’ve turned on &lt;a href="https://github.com/apimatic/apimatic-sdks-io/discussions" rel="noopener noreferrer"&gt;GitHub discussions&lt;/a&gt; as a place for conversation with us and each other.&lt;/p&gt;

&lt;p&gt;We are human, so if you find an error and can submit an issue or a pull request, we’d really appreciate your help.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s next for SDKs.io
&lt;/h2&gt;

&lt;p&gt;We’ve just launched, so feedback from the community would help us understand what you’re finding helpful and how we can improve. Our blog area will serve as a place for guest writers and SDKs news and updates. &lt;/p&gt;

&lt;p&gt;SDK research is an area we are very excited about. This research is based on public SDK repositories and developer portals. Ideally, we’d like SDK builders to contribute information about their programs to increase the representation, accuracy, and richness of our data set. Also, what questions would you like answered about SDK trends. We’d love to hear from you and find ways to provide even more valuable insights.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who is APIMatic
&lt;/h2&gt;

&lt;p&gt;APIMatic builds SDKs and &lt;a href="https://www.apimatic.io/developer-experience-portal/" rel="noopener noreferrer"&gt;documentation&lt;/a&gt; for leading technology companies to enhance their developer experience and drive API adoption. SDKs built with APIMatic have been used by millions of developers. &lt;/p&gt;

&lt;p&gt;APIMatic &lt;a href="https://www.apimatic.io/continuous-code-generation/" rel="noopener noreferrer"&gt;auto-generates SDKs&lt;/a&gt; and idiomatic code samples, which developers can copy and paste directly into their codebase. We also generate language-specific documentation, API reference docs, and how-to guides. &lt;/p&gt;

&lt;p&gt;The platform includes an API Code Playground that allows developers to make API calls directly from the documentation and modify code in their preferred language to test the results. &lt;/p&gt;

&lt;p&gt;Moreover, companies can choose to have documentation hosted by APIMatic, embedded in an existing developer portal, or deployed on their own domain. Updates to the developer experience are automated through full CI/CD integration.&lt;/p&gt;

&lt;p&gt;If you’re a developer who wants to learn more about SDKs, you should &lt;a href="https://sdks.io/docs/introduction/" rel="noopener noreferrer"&gt;check out the sdks.io website&lt;/a&gt;. With its clear and concise explanations and practical examples, sdks.io aims to help you become a more efficient and effective developer.&lt;/p&gt;

</description>
      <category>api</category>
      <category>openapi</category>
      <category>sdk</category>
      <category>generator</category>
    </item>
  </channel>
</rss>
