<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[DeveloperHub.io]]></title><description><![CDATA[Collaboration tool for Product and API docs]]></description><link>https://developerhub.io/blog/</link><image><url>https://developerhub.io/blog/favicon.png</url><title>DeveloperHub.io</title><link>https://developerhub.io/blog/</link></image><generator>Ghost 2.23</generator><lastBuildDate>Mon, 19 Jan 2026 17:58:38 GMT</lastBuildDate><atom:link href="https://developerhub.io/blog/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[The Real Cost of a High Learning Curve: Why DeveloperHub Wins for Cross-Functional Documentation]]></title><description><![CDATA[A high learning curve is not just a personal inconvenience. For growing teams, it becomes an organizational tax paid in time, misalignment, and slow knowledge flow.]]></description><link>https://developerhub.io/blog/the-real-cost-of-a-high-learning-curve-why-developerhub-wins-for-cross-functional-documentation/</link><guid isPermaLink="false">696e6d39aa1efd06d433ffb7</guid><category><![CDATA[Documentation]]></category><dc:creator><![CDATA[Zaid Daba'een]]></dc:creator><pubDate>Mon, 19 Jan 2026 17:47:32 GMT</pubDate><media:content url="https://developerhub.io/blog/content/images/2026/01/download--2-.png" medium="image"/><content:encoded><![CDATA[<img src="https://developerhub.io/blog/content/images/2026/01/download--2-.png" alt="The Real Cost of a High Learning Curve: Why DeveloperHub Wins for Cross-Functional Documentation"><p>Documentation tools are often evaluated based on features, flexibility, or how “developer-friendly” they feel. But one critical factor is frequently underestimated: <strong>learning curve</strong>.</p><p>A high learning curve is not just a personal inconvenience. For growing teams, it becomes an organizational tax paid in time, misalignment, and slow knowledge flow. This cost is especially visible when documentation is no longer owned by developers alone, but shared across support, product, QA, and operations teams.</p><p>Documentation should adapt to teams, not force teams to adapt to documentation tools.</p><h2 id="what-a-high-learning-curve-actually-means-for-teams"><strong>What a “High Learning Curve” Actually Means for Teams</strong></h2><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://developerhub.io/blog/content/images/2026/01/image.png" class="kg-image" alt="The Real Cost of a High Learning Curve: Why DeveloperHub Wins for Cross-Functional Documentation"></figure><!--kg-card-end: image--><p>When teams talk about a “high learning curve,” they’re not saying the tool is unusable. They’re pointing to hidden friction that shows up in day-to-day work.</p><p>In practice, a high learning curve means:</p><ul><li>Time spent learning tooling instead of product knowledge</li><li>Longer onboarding for new hires</li><li>Small documentation changes requiring technical intervention</li><li>Fear of “breaking the docs” when making updates</li></ul><p>These issues compound as the team grows. What feels manageable for a small engineering group becomes costly when documentation is touched by multiple roles.</p><p>High learning curves don’t just slow individuals they slow collaboration.</p><h2 id="why-developer-only-documentation-breaks-in-cross-functional-teams"><strong>Why Developer-Only Documentation Breaks in Cross-Functional Teams</strong></h2><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://developerhub.io/blog/content/images/2026/01/image-1.png" class="kg-image" alt="The Real Cost of a High Learning Curve: Why DeveloperHub Wins for Cross-Functional Documentation"></figure><!--kg-card-end: image--><p>Most traditional documentation systems are built with developers in mind. They assume contributors are comfortable with Git, Markdown, pull requests, and build pipelines.</p><p>This works well when documentation is strictly technical. It breaks down when documentation becomes a shared responsibility.</p><p>Cross-functional documentation often involves:</p><ul><li>Support teams updating FAQs and troubleshooting guides</li><li>Product managers refining feature explanations</li><li>QA teams documenting edge cases and limitations</li><li>Customer success teams maintaining onboarding flows</li></ul><p>When only developers can easily contribute, documentation becomes gated. Updates slow down, and teams begin creating their own unofficial sources of truth.</p><h2 id="the-hidden-costs-of-high-learning-curves"><strong>The Hidden Costs of High Learning Curves</strong></h2><p>The real damage caused by high learning curves is rarely visible in metrics dashboards. These costs appear in indirect but persistent ways.</p><p>Common hidden costs include:</p><ul><li>Repeated explanations instead of documented answers</li><li>Engineers context-switching to make minor text edits</li><li>Outdated documentation that lags behind product changes</li><li>Fragmented knowledge spread across multiple tools</li></ul><p>Over time, these inefficiencies reduce trust in documentation itself. When teams stop relying on docs, the entire system loses value.</p><h2 id="why-cross-functional-teams-need-clear-structure-simple-editing"><strong>Why Cross-Functional Teams Need Clear Structure + Simple Editing</strong></h2><p>As documentation expands beyond engineering, clarity becomes more important than flexibility.</p><p>Cross-functional teams need documentation systems that provide:</p><ul><li>A clear and intuitive content hierarchy</li><li>Easy-to-find navigation for both contributors and readers</li><li>Editing workflows that don’t require technical setup</li><li>Confidence that updates will publish cleanly</li></ul><p>Without these elements, documentation becomes hard to maintain and even harder to scale.</p><p>Good documentation isn’t just about what’s written it’s about how easily it can be maintained by the people closest to the knowledge.</p><h2 id="why-not-just-use-git-based-docs"><strong>Why Not Just Use Git-Based Docs?</strong></h2><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://developerhub.io/blog/content/images/2026/01/image-2.png" class="kg-image" alt="The Real Cost of a High Learning Curve: Why DeveloperHub Wins for Cross-Functional Documentation"></figure><!--kg-card-end: image--><p>Git-based documentation is often the default choice for engineering teams and for good reason. It offers version control, transparency, and tight integration with codebases. For purely technical documentation maintained by a small group of developers, it can be a solid solution.</p><p>However, problems arise when Git-based workflows are applied to <strong>cross-functional documentation</strong>.</p><p>Git is optimized for code collaboration, not for content collaboration across roles. When documentation contributors include support, product, QA, and customer success teams, the friction becomes obvious.</p><p>Common challenges with Git-based docs include:</p><ul><li>Non-technical contributors struggling with Git concepts like branches, commits, and pull requests</li><li>Fear of breaking builds or causing merge conflicts over simple text edits</li><li>Documentation updates being deprioritized because they require developer involvement</li><li>Slower turnaround for critical changes such as support fixes or clarifications</li></ul><p>In theory, everyone <em>can</em> learn Git. In practice, forcing every contributor to do so shifts focus away from documentation quality and toward tooling mastery.</p><p>Another limitation is structural. Git-based systems tend to organize content around files and repositories rather than user journeys. As documentation grows, navigation becomes harder to reason about, especially for non-engineers who think in terms of features and workflows rather than directories.</p><p>This doesn’t mean Git-based documentation is bad. It means it’s <strong>incomplete</strong> for teams that rely on multiple contributors with different skill sets.</p><p>That’s why modern documentation platforms don’t replace Git they complement it.</p><h2 id="how-developerhub-reduces-friction-for-growing-teams"><strong>How DeveloperHub Reduces Friction for Growing Teams</strong></h2><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://developerhub.io/blog/content/images/2026/01/image-3.png" class="kg-image" alt="The Real Cost of a High Learning Curve: Why DeveloperHub Wins for Cross-Functional Documentation"></figure><!--kg-card-end: image--><p><a href="https://developerhub.io/" rel="noopener noreferrer">DeveloperHub</a> is designed with the reality of cross-functional documentation in mind. Instead of forcing all contributors into a single workflow, it supports different roles without fragmenting content.</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://developerhub.io/blog/content/images/2026/01/image-4.png" class="kg-image" alt="The Real Cost of a High Learning Curve: Why DeveloperHub Wins for Cross-Functional Documentation"></figure><!--kg-card-end: image--><p>Non-technical contributors can update documentation using a no-code editor, without touching repositories or build systems.</p><p>This enables:</p><ul><li>Faster updates from support and product teams</li><li>Less dependency on engineers for minor changes</li><li>More accurate, up-to-date documentation</li></ul><p>At the same time, engineers retain the ability to contribute via Git and Markdown when needed.</p><h3 id="clear-content-hierarchy-that-scales"><strong>Clear Content Hierarchy That Scales</strong></h3><p><a href="https://developerhub.io/" rel="noopener noreferrer">DeveloperHub</a> emphasizes structure from the start. Documentation is organized around products, features, and use cases rather than folders and files.</p><p>This structure helps teams:</p><ul><li>Maintain consistency as content grows</li><li>Onboard new contributors faster</li><li>Reduce duplication and confusion</li></ul><p>A clear hierarchy turns documentation into a navigable system, not a content dump.</p><h3 id="shared-access-across-roles"><strong>Shared Access Across Roles</strong></h3><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://developerhub.io/blog/content/images/2026/01/image-5.png" class="kg-image" alt="The Real Cost of a High Learning Curve: Why DeveloperHub Wins for Cross-Functional Documentation"></figure><!--kg-card-end: image--><p>Instead of splitting documentation across tools, DeveloperHub keeps everyone working in the same platform.</p><p>This shared access means:</p><ul><li>One source of truth for all documentation</li><li>Fewer handoffs between teams</li><li>Better alignment between product, support, and engineering</li></ul><p>When documentation is shared, knowledge flows faster and more reliably.</p><h2 id="lower-learning-curve-better-documentation-quality"><strong>Lower Learning Curve, Better Documentation Quality</strong></h2><p>Lowering the learning curve doesn’t reduce rigor it increases participation.</p><p>When more people can contribute easily:</p><ul><li>Errors are caught earlier</li><li>Gaps in documentation are filled faster</li><li>Content reflects real user questions, not assumptions</li></ul><p>Documentation improves not because tools are simpler, but because they remove unnecessary barriers.</p><h2 id="documentation-should-adapt-to-teams-not-the-other-way-around"><strong>Documentation Should Adapt to Teams, Not the Other Way Around</strong></h2><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://developerhub.io/blog/content/images/2026/01/image-6.png" class="kg-image" alt="The Real Cost of a High Learning Curve: Why DeveloperHub Wins for Cross-Functional Documentation"></figure><!--kg-card-end: image--><p>High learning curves are often justified as the price of “powerful” tooling. But in documentation, power isn’t measured by complexity it’s measured by how well knowledge moves through an organization.</p><p>The most effective documentation systems are those that scale with teams, support multiple contributors, and remain easy to maintain over time.</p><p>DeveloperHub succeeds because it treats documentation as a shared asset, not a developer-only responsibility.</p><p>When documentation adapts to teams, collaboration improves, onboarding accelerates, and documentation becomes a strategic advantage instead of a maintenance burden.</p><h2 id="final-thoughts-learning-curves-shouldn-t-be-a-tax-on-knowledge"><strong>Final Thoughts: Learning Curves Shouldn’t Be a Tax on Knowledge</strong></h2><p>High learning curves are often justified in engineering tools because they unlock deep technical power. But documentation is different. Its primary purpose isn’t to showcase complexity it’s to <strong>move knowledge efficiently across teams and to users</strong>.</p><p>When documentation tools require excessive setup, specialized knowledge, or developer-only workflows, they quietly limit who can contribute. Over time, this leads to slower updates, fragmented sources of truth, and documentation that no longer reflects how the product actually works.</p><p>The real question teams should ask isn’t whether a tool is powerful, but whether it scales with the way their organization collaborates.</p><p>Cross-functional documentation demands:</p><ul><li>Clear structure instead of clever configuration</li><li>Simple editing instead of fragile pipelines</li><li>Shared ownership instead of centralized gatekeeping</li></ul><p><a href="https://developerhub.io/" rel="noopener noreferrer">DeveloperHub</a> works well in this space because it doesn’t force a single workflow on everyone. It respects the realities of modern teams, where engineers, support, product, and QA all play a role in maintaining accurate documentation.</p><p>In the end, the best documentation systems aren’t the hardest to learn. They’re the ones that quietly disappear into the background, letting teams focus on what actually matters: building, supporting, and improving products.</p><p>When documentation adapts to teams rather than the other way around knowledge stops being a bottleneck and starts becoming a competitive advantage.</p>]]></content:encoded></item><item><title><![CDATA[Meet Your New OpenAPI Editor: A Modern Alternative to Swagger Editor]]></title><description><![CDATA[<!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://developerhub.io/blog/content/images/2025/11/api-editor-1.jpg" class="kg-image"></figure><!--kg-card-end: image--><p>For years, editor.swagger.io was the place everyone went to sketch out an OpenAPI definition. It was familiar, convenient, and good enough for its time. The problem is simple though: the specification has moved on, tooling expectations have moved on, and that classic editor has not kept pace.</p><p>If</p>]]></description><link>https://developerhub.io/blog/meet-your-new-openapi-editor-a-modern-alternative-to-swagger-editor/</link><guid isPermaLink="false">6919bf91aa1efd06d433ff88</guid><dc:creator><![CDATA[Zaid Daba'een]]></dc:creator><pubDate>Sun, 16 Nov 2025 12:24:10 GMT</pubDate><media:content url="https://developerhub.io/blog/content/images/2025/11/api-editor.jpg" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://developerhub.io/blog/content/images/2025/11/api-editor-1.jpg" class="kg-image" alt="Meet Your New OpenAPI Editor: A Modern Alternative to Swagger Editor"></figure><!--kg-card-end: image--><img src="https://developerhub.io/blog/content/images/2025/11/api-editor.jpg" alt="Meet Your New OpenAPI Editor: A Modern Alternative to Swagger Editor"><p>For years, editor.swagger.io was the place everyone went to sketch out an OpenAPI definition. It was familiar, convenient, and good enough for its time. The problem is simple though: the specification has moved on, tooling expectations have moved on, and that classic editor has not kept pace.</p><p>If you work with OpenAPI today especially with the changes landing in 3.2 you need more than syntax colouring. You need proper linting. You need awareness of the latest features. You need a clear structure of your document so you can navigate without hunting through thousands of lines.</p><p>So we built it.</p><h3 id="a-modern-editor-for-openapi-3-2"><strong>A Modern Editor for OpenAPI 3.2</strong></h3><p>The new API editor at <strong><a href="https://app.developerhub.io/api-editor">app.developerhub.io/api-editor</a></strong> is designed to be the natural successor to Swagger Editor. It is fully free to use, and you do not need an account.</p><p>Here is what it brings to the table:</p><p><strong>Full OpenAPI 3.2 support</strong></p><p>Every new feature in 3.2 works out of the box. Structured tags, QUERY, updated XML modelling, improved multipart definitions, event streams and more. No hacks or extensions to make the editor understand your document.</p><p><strong>Built in linting</strong></p><p>The editor flags issues as you type, from simple mistakes to deeper design concerns. You get instant feedback, not silent failures.</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://developerhub.io/blog/content/images/2025/11/api-editor-lint.jpg" class="kg-image" alt="Meet Your New OpenAPI Editor: A Modern Alternative to Swagger Editor"></figure><!--kg-card-end: image--><p><strong>Document outline</strong></p><p>Large API definitions become manageable. The outline panel shows your tags, paths, components and schema tree, making navigation easy.</p><p><strong>No set up, no friction</strong></p><p>Open the page, paste your definition, and you are ready to work. Nothing to install. Nothing to configure.</p><h3 id="why-this-matters"><strong>Why this matters</strong></h3><p>Teams have relied on Swagger Editor for nearly a decade, but the ecosystem has evolved. Tooling needs to reflect the modern specification, not the one from years ago. By offering a free, always up to date editor, we want to make it easier for developers, writers and architects to create accurate and future proof OpenAPI definitions.</p><p>If your workflow still leans on editor.swagger.io, it might be time to upgrade. Try the new editor at:</p><p><strong><a href="https://app.developerhub.io/api-editor">DeveloperHub - API Editor</a></strong></p><p>It works in the browser, it costs nothing, and it already speaks OpenAPI 3.2 fluently.</p>]]></content:encoded></item><item><title><![CDATA[XML Modelling in OpenAPI 3.2: A Quiet but Important Upgrade for Enterprise Teams]]></title><description><![CDATA[OpenAPI 3.2 modernises XML support with richer modelling, proper attribute handling, and nested structures. It removes old workarounds and gives enterprise teams clearer, more accurate ways to define their XML based APIs.]]></description><link>https://developerhub.io/blog/xml-modelling-in-openapi-3-2-a-quiet-but-important-upgrade-for-enterprise-teams/</link><guid isPermaLink="false">691740e5aa1efd06d433ff1f</guid><category><![CDATA[OpenAPI]]></category><category><![CDATA[Engineering]]></category><dc:creator><![CDATA[Zaid Daba'een]]></dc:creator><pubDate>Fri, 14 Nov 2025 14:54:07 GMT</pubDate><media:content url="https://developerhub.io/blog/content/images/2025/11/openapi3.2.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: html--><div style="background-color: #effbff;border: 2px solid #c6f1ff;border-radius: 6px;padding: 8px 16px; width: 100%; margin-bottom: 24px;">🎉 Now supported in DeveloperHub</div><!--kg-card-end: html--><img src="https://developerhub.io/blog/content/images/2025/11/openapi3.2.png" alt="XML Modelling in OpenAPI 3.2: A Quiet but Important Upgrade for Enterprise Teams"><p>JSON may dominate modern API design, but XML remains deeply embedded in many enterprise systems. Banks, insurers, logistics networks, public sector systems, and large internal platforms all continue to rely on XML for structured, strongly typed data.</p><p>OpenAPI had XML support before, but it was limited. It worked for simple examples, but it could not accurately represent real enterprise XML formats with namespaces, attributes, wrapped arrays, or mixed content.</p><p>OpenAPI 3.2 changes that. It introduces clearer, more expressive XML modelling that finally lets teams describe their XML in a faithful and predictable way.</p><h2 id="why-xml-needed-attention"><strong>Why XML Needed Attention</strong></h2><p>OpenAPI 3.1 could express a few basics, but it fell short when modelling XML such as:</p><ul><li>elements that mix attributes and child content</li><li>namespaced payloads</li><li>text content inside complex types</li><li>wrapped arrays with strict naming</li><li>schemas where element names differ from property names</li></ul><p>These gaps forced teams to maintain parallel XSDs, rely on proprietary extensions, or manually document XML behaviour in prose.</p><p>OpenAPI 3.2 closes many of these gaps.</p><h2 id="1-clear-namespace-support"><strong>1. Clear Namespace Support</strong></h2><h3 id="before-openapi-3-1-"><strong>Before (OpenAPI 3.1)</strong></h3><p>There was no clean way to define a namespace prefix. Tools guessed from XML examples or ignored the namespace entirely.</p><!--kg-card-begin: code--><pre><code class="language-yaml">xml:
  namespace: "http://acme.com/payments"</code></pre><!--kg-card-end: code--><p>No way to say which prefix to use. No way to ensure generated XML matched the contract.</p><h3 id="now-openapi-3-2-"><strong>Now (OpenAPI 3.2)</strong></h3><p>Namespaces can define both the URI and the prefix, allowing accurate generation and parsing.</p><!--kg-card-begin: code--><pre><code class="language-yaml">xml:
  namespace:
    uri: "http://acme.com/payments"
    prefix: "pay"</code></pre><!--kg-card-end: code--><p>This is essential for enterprise XML that relies heavily on namespaced elements.</p><h2 id="2-more-accurate-representation-of-attributes"><strong>2. More Accurate Representation of Attributes</strong></h2><h3 id="before"><strong>Before</strong></h3><p>Attributes were possible but poorly defined. Adding both attributes and text content in the same structure often confused tools.</p><p>For example, this structure could not be expressed reliably:</p><!--kg-card-begin: code--><pre><code class="language-xml">&lt;amount currency="USD"&gt;120.50&lt;/amount&gt;</code></pre><!--kg-card-end: code--><h3 id="now"><strong>Now</strong></h3><p>OpenAPI 3.2 supports well defined attribute modelling alongside text content.</p><!--kg-card-begin: code--><pre><code class="language-yaml">type: object
xml:
  name: amount
properties:
  currency:
    type: string
    xml:
      attribute: true
  value:
    type: string
    xml:
      text: true</code></pre><!--kg-card-end: code--><p>The result closely mirrors the real XML rather than reducing everything to elements.</p><h2 id="3-proper-handling-of-wrapped-arrays"><strong>3. Proper Handling of Wrapped Arrays</strong></h2><h3 id="before-1"><strong>Before</strong></h3><p>Wrapped arrays were supported, but only at a basic level, and always assumed generic wrapping. Complex wrapped structures were impossible to describe.</p><p>For example, this common structure:</p><!--kg-card-begin: code--><pre><code class="language-xml">&lt;items&gt;
  &lt;item&gt;One&lt;/item&gt;
  &lt;item&gt;Two&lt;/item&gt;
&lt;/items&gt;</code></pre><!--kg-card-end: code--><p>was supported, but:</p><!--kg-card-begin: code--><pre><code class="language-xml">&lt;inventory&gt;
  &lt;products&gt;
    &lt;product&gt;...&lt;/product&gt;
  &lt;/products&gt;
&lt;/inventory&gt;</code></pre><!--kg-card-end: code--><p>could not be modelled with its multiple layers of specific element names.</p><h3 id="now-1"><strong>Now</strong></h3><p>OpenAPI 3.2 allows precise control of wrapper element names.</p><!--kg-card-begin: code--><pre><code class="language-yaml">type: array
xml:
  name: products
  wrapped: true
items:
  xml:
    name: product</code></pre><!--kg-card-end: code--><p>More complex multi level wrappers now work predictably.</p><h2 id="4-more-faithful-complex-types-with-text-content"><strong>4. More Faithful Complex Types with Text Content</strong></h2><h3 id="before-2"><strong>Before</strong></h3><p>Mixed content was not representable. Any element containing both text and child elements was impossible to model correctly.</p><p>For example:</p><!--kg-card-begin: code--><pre><code class="language-xml">&lt;note priority="high"&gt;This is a message &lt;bold&gt;sent today&lt;/bold&gt;&lt;/note&gt;</code></pre><!--kg-card-end: code--><p>This simply could not be expressed.</p><h3 id="now-2"><strong>Now</strong></h3><p>OpenAPI 3.2 introduces clearer rules for text content inside objects.</p><!--kg-card-begin: code--><pre><code class="language-yaml">type: object
xml:
  name: note
properties:
  priority:
    type: string
    xml:
      attribute: true
  content:
    type: string
    xml:
      text: true
  bold:
    type: string</code></pre><!--kg-card-end: code--><p>Tools can now produce mixed content more consistently.</p><h2 id="5-cleaner-examples-with-namespaces-and-structure"><strong>5. Cleaner Examples with Namespaces and Structure</strong></h2><p>XML examples can now be rendered exactly as intended.</p><h3 id="before-3"><strong>Before</strong></h3><p>Examples were often rendered incorrectly because tools lacked information about prefixes, attribute ordering, or nested wrappers.</p><h3 id="now-3"><strong>Now</strong></h3><p>An example such as:</p><!--kg-card-begin: code--><pre><code class="language-yaml">examples:
  simple:
    value: |
      &lt;pay:transaction xmlns:pay="http://acme.com/payments"&gt;
        &lt;pay:amount currency="USD"&gt;120.50&lt;/pay:amount&gt;
      &lt;/pay:transaction&gt;</code></pre><!--kg-card-end: code--><p>can be generated, documented, and validated correctly.</p><h2 id="why-this-is-important-for-enterprise-teams"><strong>Why This Is Important for Enterprise Teams</strong></h2><p>These improvements mean:</p><ul><li>fewer separate XSDs to maintain</li><li>fewer vendor extensions</li><li>more predictable generated XML</li><li>documentation that finally matches real world XML</li><li>less confusion for partners integrating with legacy systems</li><li>better long term compatibility for platforms that cannot switch to JSON</li></ul><p>It is a practical modernisation of XML within OpenAPI, not a theoretical tweak.</p><h2 id="a-step-toward-real-enterprise-support"><strong>A Step Toward Real Enterprise Support</strong></h2><p>OpenAPI has been strongly focused on JSON for years, but OpenAPI 3.2 broadens the specification to reflect the reality inside many large organisations.</p><p>By strengthening XML modelling, it gives developers a clear, standardised way to describe the formats they actually use.</p>]]></content:encoded></item><item><title><![CDATA[Deprecations, Defaults, and Details: The Subtle Tweaks You Might Miss in OpenAPI 3.2]]></title><description><![CDATA[OpenAPI 3.2 brings subtle refinements that make specs cleaner and more predictable, from improved deprecation handling to clarified defaults, schema rules, and examples.]]></description><link>https://developerhub.io/blog/deprecations-defaults-and-details-the-subtle-tweaks-you-might-miss-in-openapi-3-2/</link><guid isPermaLink="false">690094a2aa1efd06d433ff03</guid><category><![CDATA[OpenAPI]]></category><category><![CDATA[Engineering]]></category><dc:creator><![CDATA[Zaid Daba'een]]></dc:creator><pubDate>Tue, 28 Oct 2025 10:04:36 GMT</pubDate><media:content url="https://developerhub.io/blog/content/images/2025/10/openapi3.2-6.png" medium="image"/><content:encoded><![CDATA[<img src="https://developerhub.io/blog/content/images/2025/10/openapi3.2-6.png" alt="Deprecations, Defaults, and Details: The Subtle Tweaks You Might Miss in OpenAPI 3.2"><p>OpenAPI 3.2 comes with some big, headline features: streaming responses, structured tags, and even a new QUERY method.</p><p>But beneath those, there’s a quieter layer of refinements that make life easier for spec authors, tool builders, and documentation teams alike.</p><p>These are not the kind of updates that make release notes, but they are the ones that make your API definitions cleaner, stricter, and more predictable.</p><h3 id="1-smarter-deprecated-handling"><strong>1. Smarter deprecated handling</strong></h3><p>Until now, marking something as deprecated: true was purely informational.</p><p>It signalled intent, but OpenAPI itself did not give much guidance on what could or should be deprecated.</p><p>OpenAPI 3.2 tightens that.</p><p>You can now mark <strong>schemas, parameters, headers, and even examples</strong> as deprecated, not just endpoints or operations.</p><p>This allows for more <strong>granular control</strong> in large APIs.</p><p>A single field in a model can be deprecated without confusing users or breaking the schema entirely.</p><p>For tool builders, it also means automated documentation can now visually highlight deprecated properties everywhere, not just in endpoint summaries.</p><h3 id="2-explicit-defaults-are-now-encouraged"><strong>2. Explicit defaults are now encouraged</strong><br></h3><p>Default values have always existed in OpenAPI, but they were loosely defined.</p><p>Different tools interpreted them differently, some treated them as examples, others as enforced fallbacks.</p><p>In 3.2, <strong>defaults are explicitly clarified</strong> to be <em>informational hints</em> to consumers, not behavioural guarantees.</p><p>This subtle change aligns OpenAPI with how most servers and SDKs actually behave:</p><p>Defaults are what <strong>clients may assume</strong>, not what <strong>servers must enforce</strong>.</p><p>Tools can now safely display default values without implying server logic.</p><p>For documentation and SDK generation, that means fewer misleading assumptions and a clearer contract between client and server.</p><h3 id="3-example-and-example-set-improvements"><strong>3. Example and example set improvements</strong></h3><p><br>OpenAPI 3.2 refines how examples can be defined and reused.</p><p>Examples are now allowed in more places, including within headers, parameters, and links.</p><p>This makes it easier to produce <strong>richer, context-aware documentation</strong> that shows realistic usage patterns.</p><p>You can also define <strong>multiple named examples</strong> more consistently across objects, enabling tools to display example tabs without relying on vendor extensions.</p><p>In short: less <code>x-examples</code> clutter and more consistency across your spec.</p><h3 id="4-cleaner-schema-references"><strong>4. Cleaner schema references</strong></h3><p>3.2 also revisits how <code>$ref</code> behaves inside schema objects.</p><p>Previously, if you referenced a schema and added extra keywords next to it (like description, default, or nullable), tools disagreed on whether those extras should merge or override.</p><p>Now, the spec explicitly clarifies that <strong>adjacent keywords to <code>$ref</code> must be ignored</strong>. They do not merge.</p><p>This prevents subtle validation inconsistencies between generators, validators, and documentation tools.</p><p>If you want to extend a referenced schema, you now do so explicitly using allOf, as intended.</p><h3 id="5-polished-content-type-rules"><strong>5. Polished content type rules</strong></h3><p>The new version also clarifies the relationship between content and schema definitions in request and response bodies.</p><p>In 3.0 and 3.1, it was easy to misconfigure a response with both, which led to unexpected validation results.</p><p>Now, OpenAPI 3.2 enforces a <strong>single source of truth</strong>: each media type defines its own schema.</p><p>This change improves clarity and helps API editors and linters catch misconfigurations early.</p><h3 id="the-small-things-add-up"><strong>The small things add up</strong></h3><p>None of these updates will make headlines.</p><p>But together, they make OpenAPI 3.2 <strong>a more precise, predictable, and developer-friendly specification</strong>.</p><p>They also highlight the standard’s broader philosophy: evolve carefully, standardise what already works in the community, and make complex APIs just a bit simpler to describe.</p><p>So while the new features get the spotlight, it’s these quiet clarifications that will save developers hours in the long run.</p>]]></content:encoded></item><item><title><![CDATA[The New QUERY Method in OpenAPI 3.2: A Small Addition That Clears Up a Big Ambiguity]]></title><description><![CDATA[OpenAPI 3.2 adds support for the new QUERY method — a read-only operation that allows a request body. It’s designed for search and filtering endpoints that don’t fit neatly into GET or POST.]]></description><link>https://developerhub.io/blog/the-new-query-method-in-openapi-3-2-a-small-addition-that-clears-up-a-big-ambiguity/</link><guid isPermaLink="false">68ff3656aa1efd06d433febd</guid><category><![CDATA[OpenAPI]]></category><category><![CDATA[Engineering]]></category><dc:creator><![CDATA[Zaid Daba'een]]></dc:creator><pubDate>Mon, 27 Oct 2025 09:15:46 GMT</pubDate><media:content url="https://developerhub.io/blog/content/images/2025/10/openapi3.2-5.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: html--><div style="background-color: #effbff;border: 2px solid #c6f1ff;border-radius: 6px;padding: 8px 16px; width: 100%; margin-bottom: 24px;">🎉 Now supported in DeveloperHub</div><!--kg-card-end: html--><img src="https://developerhub.io/blog/content/images/2025/10/openapi3.2-5.png" alt="The New QUERY Method in OpenAPI 3.2: A Small Addition That Clears Up a Big Ambiguity"><p>One of the quieter updates in <strong>OpenAPI 3.2</strong> is support for a new HTTP method: QUERY.</p><p>It’s small, but it clarifies something that’s been fuzzy in API design for years — how to represent read-only, query-style operations that aren’t strictly GET.</p><h3 id="why-query-exists"><strong>Why QUERY Exists</strong></h3><p>Traditionally, REST APIs have used GET for anything that retrieves data. But GET comes with a few assumptions baked in by the HTTP spec:</p><ul><li>Requests must be <strong>idempotent</strong> (no side effects).</li><li>Requests can’t have a <strong>body</strong>.</li><li>Parameters have to fit into the <strong>URL query string</strong>.</li></ul><p>That last point has caused trouble.</p><p>Some APIs need to send complex filters, nested objects, or large request payloads — all while keeping the operation read-only.</p><p>GET doesn’t allow that.</p><p>POST does, but using POST for read-only queries violates the spirit of HTTP semantics and breaks cacheability.</p><p>The new QUERY method is meant to fix that gap.</p><h3 id="what-query-does"><strong>What QUERY Does</strong></h3><p>QUERY is a <strong>read-only method that allows a request body</strong>.</p><p>That means you can write operations like:</p><!--kg-card-begin: code--><pre><code class="language-yaml">paths:
  /search:
    query:
      summary: Search for users
      description: Performs a read-only query with a complex filter
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                filters:
                  type: object
                  properties:
                    country:
                      type: string
                    active:
                      type: boolean
      responses:
        '200':
          description: Search results
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserList'</code></pre><!--kg-card-end: code--><p>This example describes a <strong>search endpoint</strong> that can take a JSON body instead of a long, hard-to-parse URL query string — while remaining strictly read-only.</p><h3 id="why-it-matters"><strong>Why It Matters</strong></h3><p>For API consumers, this makes specs and SDKs more predictable.</p><p>For API authors, it allows <strong>expressive query operations</strong> without semantic compromises.</p><p>Here’s what changes in practice:</p><ul><li><strong>Cleaner API design:</strong> You no longer need to overload POST just because your query has a JSON payload.</li><li><strong>Better caching:</strong> Since QUERY is explicitly read-only, it’s easier to implement caching semantics safely.</li><li><strong>Improved documentation:</strong> Docs and SDKs can clearly label query endpoints as non-mutating, even with request bodies.</li></ul><h3 id="tooling-and-adoption"><strong>Tooling and Adoption</strong></h3><p>This is where things get interesting.</p><p>While OpenAPI 3.2 now recognises QUERY, many <strong>web servers, frameworks, and HTTP libraries</strong> don’t — at least not yet. The method is new to the specification world, but not yet part of the <strong>core HTTP vocabulary</strong> most runtimes expect.</p><p>That means you can document QUERY operations today, but whether they’ll <em>run</em> as-is depends on your stack:</p><ul><li>Many frameworks will reject unknown methods until they’re explicitly supported.</li><li>API gateways and reverse proxies (like NGINX or Cloudflare) might block them unless configured to pass them through.</li><li>SDK generators and clients will need to update their request builders to handle QUERY gracefully.</li></ul><p>So in practice, QUERY is more of a <strong>forward-looking signal</strong> than a production-ready feature right now.</p><p>Teams can start by using it in their <strong>OpenAPI specs</strong> to clarify intent — even if they continue serving those endpoints via POST temporarily. Over time, as web servers and tooling catch up, these definitions will become executable, not just descriptive.</p><h3 id="a-step-toward-clarity"><strong>A Step Toward Clarity</strong></h3><p>The addition of QUERY isn’t about introducing something new — it’s about naming what developers have already been doing.</p><p>Many APIs have had “read-only POST” endpoints for years. Now, with OpenAPI 3.2, there’s a consistent, standards-based way to describe them.</p><p>It’s another small example of how OpenAPI evolves thoughtfully: by turning common patterns into first-class citizens.</p>]]></content:encoded></item><item><title><![CDATA[Structured Tags in OpenAPI 3.2: Organising APIs the Way They Deserve]]></title><description><![CDATA[OpenAPI 3.2 introduces structured tags, allowing APIs to organize endpoints into nested categories for clearer, more maintainable documentation.]]></description><link>https://developerhub.io/blog/structured-tags-openapi-3-2/</link><guid isPermaLink="false">68fe8a0aaa1efd06d433fe7e</guid><category><![CDATA[OpenAPI]]></category><category><![CDATA[Engineering]]></category><dc:creator><![CDATA[Zaid Daba'een]]></dc:creator><pubDate>Sun, 26 Oct 2025 21:00:37 GMT</pubDate><media:content url="https://developerhub.io/blog/content/images/2025/10/openapi3.2-3.png" medium="image"/><content:encoded><![CDATA[<img src="https://developerhub.io/blog/content/images/2025/10/openapi3.2-3.png" alt="Structured Tags in OpenAPI 3.2: Organising APIs the Way They Deserve"><p>One of the most underrated additions in <strong>OpenAPI 3.2</strong> is the new support for <strong>structured, hierarchical tags</strong>.</p><p>It doesn’t sound like much at first — tags have existed since the earliest OpenAPI versions. But this change quietly solves one of the most persistent pain points in large-scale API documentation: structure.</p><h3 id="the-problem-with-flat-tags"><strong>The Problem With Flat Tags</strong></h3><p>Before 3.2, OpenAPI only supported a flat list of tags. Each operation could reference one or more tags, and documentation tools would group endpoints accordingly.</p><p>That was fine for small APIs. But as soon as you had dozens or hundreds of operations, the tag list turned into a scrollable wall of names:</p><!--kg-card-begin: code--><pre><code>users
users-profile
users-notifications
payments
payments-webhooks
analytics
analytics-metrics
analytics-reports</code></pre><!--kg-card-end: code--><p>Developers ended up overloading tag names to imply hierarchy — adding hyphens, prefixes, or categories — and relying on their doc viewer to make sense of it. The spec didn’t help you structure it; you just hoped your conventions held up.</p><h3 id="what-changes-in-3-2"><strong>What Changes in 3.2</strong></h3><p>With <strong>OpenAPI 3.2</strong>, the Tag Object can now be <strong>nested</strong> and <strong>grouped</strong>. Tags can belong to categories, subcategories, or other tags — allowing documentation tools and SDK generators to represent APIs in logical hierarchies.</p><p>An example might look like this:</p><!--kg-card-begin: code--><pre><code class="language-yaml">tags:
  - name: users
    description: Endpoints related to user management
    summary: Users
  - name: profile
    description: Profile operations
    summary: Profile
    parent: users # &lt;--- Makes profile a child of users
  - name notifications
    description: User notifications
    summary: Notifications
    parent: users
    
  - name: payments
    description: Payment processing and billing</code></pre><!--kg-card-end: code--><p>Docs tools can then visualise these relationships as nested menus, collapsible sections, or grouped navigation trees.</p><p>Tags are still used the same way as before:</p><!--kg-card-begin: code--><pre><code class="language-yaml">paths:
  /users/{id}/profile:
    get:
      summary: Get user profile
      tags: [profile]
      responses:
        '200':
          description: Returns a user profile</code></pre><!--kg-card-end: code--><p>View the <a href="https://spec.openapis.org/oas/v3.2.0.html#tag-object">Tag Object</a> full details in OpenAPI 3.2 Specification.</p><h3 id="why-it-matters"><strong>Why It Matters</strong></h3><p>For large organisations, this change brings real clarity.</p><ul><li><strong>Better navigation:</strong> You can now organize endpoints by domain, feature, or business area, not just alphabetically.</li><li><strong>Cleaner docs:</strong> Readers get a structured hierarchy that mirrors how the product is built.</li><li><strong>Smarter SDKs:</strong> Code generators can use tag structure to create namespaces or class groupings automatically.</li></ul><p><strong>Fewer naming hacks:</strong> No more manual prefixing to simulate folders or sections.</p><p>It’s a small spec change with a big downstream effect — especially for teams maintaining large or modular APIs.</p><h3 id="a-small-step-toward-more-maintainable-apis"><strong>A Small Step Toward More Maintainable APIs</strong></h3><p>Structured tags don’t change how your API behaves — they change how it’s <strong>understood</strong>.</p><p>That’s an equally important part of API design.</p><p>This update is about clarity at scale. And for teams that manage complex platforms or multiple product areas, that clarity can make all the difference.</p><h3 id="comparison-with-x-taggroups"><strong>Comparison with x-tagGroups</strong></h3><p>Before OpenAPI 3.2, the only way to organise tags hierarchically was through the <code>x-tagGroups</code> extension, an unofficial convention popularised by tools.</p><p>While it worked well in some ecosystems, it was never part of the OpenAPI standard.</p><p>That meant support was inconsistent: some documentation tools rendered tag groups beautifully, while others ignored them entirely.</p><p>With <strong>structured tags</strong> now built into OpenAPI 3.2, this kind of grouping is finally <strong>standardised and portable</strong>.</p><p>You no longer have to rely on vendor-specific extensions or risk losing structure when switching tools.</p><p>For API designers and documentation teams, that means one thing: <strong>your tag hierarchy will now look the same everywhere.</strong></p>]]></content:encoded></item><item><title><![CDATA[Event streaming in OpenAPI 3.2: What changed and why it matters]]></title><description><![CDATA[OpenAPI 3.2 brings first‑class event streaming with sequential media types and an itemSchema for each event. Document SSE or JSONL streams clearly—ideal for LLMs that stream tokens, optional summaries, and a deterministic “[DONE]” sentinel to end the stream.]]></description><link>https://developerhub.io/blog/event-streaming-in-openapi-3-2-what-changed-and-why-it-matters/</link><guid isPermaLink="false">68e380caaa1efd06d433fe51</guid><category><![CDATA[OpenAPI]]></category><category><![CDATA[Engineering]]></category><dc:creator><![CDATA[Zaid Daba'een]]></dc:creator><pubDate>Mon, 06 Oct 2025 08:47:55 GMT</pubDate><media:content url="https://developerhub.io/blog/content/images/2025/10/openapi3.2-4.png" medium="image"/><content:encoded><![CDATA[<img src="https://developerhub.io/blog/content/images/2025/10/openapi3.2-4.png" alt="Event streaming in OpenAPI 3.2: What changed and why it matters"><p>OpenAPI 3.2 brings native, first‑class ways to describe APIs that send data as a sequence of events instead of a single, monolithic payload. This is a big deal for real‑time apps—LLMs, analytics feeds, chat, logs, and anything that benefits from progressive rendering or lower perceived latency. At a high level, OpenAPI 3.2 formalizes “sequential” media types and lets you specify the schema of each item in the stream using a new itemSchema on a response media type. That means your documentation can be explicit about the shape of each event, not just the overall connection.</p><ul><li>New capability: Use itemSchema under content to define the structure of each streamed event.</li></ul><p>Supported sequential media types:</p><ul><li>SSE: text/event-stream</li><li>JSON Lines: application/jsonl</li><li>JSON Sequences: application/json-seq</li><li>Multipart Mixed: multipart/mixed</li></ul><p>This unlocks consistent tooling, clearer client expectations, and better validation for streaming APIs.</p><h3 id="a-quick-primer-how-streaming-differs-from-normal-responses">A quick primer: how streaming differs from “normal” responses</h3><ul><li>Normal response: One payload, one schema.</li><li>Streaming response: Many items over time; each item conforms to the itemSchema. The transport stays open while the server emits items; the client processes incrementally.</li></ul><p>Common patterns you’ll see:</p><ul><li>SSE for text/token streams in browsers</li><li>JSONL for structured event logs and incremental model outputs</li><li>Multipart for mixed binary/text chunks (e.g., speech + text)</li><li>Sentinel events like [DONE] to cleanly signal the end of a stream</li></ul><h3 id="example-describing-an-llm-s-streaming-api-sse-">Example: describing an LLM’s streaming API (SSE)</h3><p>Here’s a minimal but realistic OpenAPI 3.2 spec for a text‑generation endpoint that streams tokens via Server‑Sent Events. The server emits events as they become available; clients render tokens progressively.</p><!--kg-card-begin: code--><pre><code class="language-yaml">openapi: 3.2.0
info:
  title: LLM Streaming API
  version: 1.0.0
paths:
  /generate:
    post:
      summary: Stream generated text from the LLM
      description: |
        Streams model output incrementally using Server-Sent Events (SSE).
        Each event contains a token chunk; a sentinel signals the end.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required: [model, prompt]
              properties:
                model:
                  type: string
                  description: Model identifier (e.g., "gpt-4o-mini")
                prompt:
                  type: string
                  description: The input prompt for text generation
                max_tokens:
                  type: integer
                  minimum: 1
                  default: 256
                temperature:
                  type: number
                  minimum: 0
                  maximum: 2
                  default: 0.7
      responses:
        "200":
          description: Stream of generation events via SSE
          headers:
            Content-Type:
              schema:
                type: string
                enum: ["text/event-stream"]
          content:
            text/event-stream:
              itemSchema:
                oneOf:
                  - type: object
                    required: [event, data]
                    properties:
                      event:
                        type: string
                        enum: ["token"]
                        description: Event type
                      data:
                        type: object
                        required: [text, index]
                        properties:
                          text:
                            type: string
                            description: Token or text chunk
                          index:
                            type: integer
                            minimum: 0
                            description: Incrementing token index
                          logprobs:
                            type: number
                            nullable: true
                            description: Optional per-token log prob
                          finish_reason:
                            type: string
                            nullable: true
                            enum: ["stop", "length", "content_filter", null]
                  - type: object
                    required: [event, data]
                    properties:
                      event:
                        type: string
                        enum: ["summary"]
                      data:
                        type: object
                        properties:
                          usage:
                            type: object
                            properties:
                              prompt_tokens: { type: integer, minimum: 0 }
                              completion_tokens: { type: integer, minimum: 0 }
                              total_tokens: { type: integer, minimum: 0 }
                          model:
                            type: string
                  - type: object
                    required: [event, data]
                    properties:
                      event:
                        type: string
                        enum: ["done"]
                      data:
                        type: string
                        enum: ["[DONE]"]
        "400":
          description: Invalid request
          content:
            application/json:
              schema:
                type: object
                required: [error]
                properties:
                  error:
                    type: string
        "429":
          description: Rate limited
        "500":
          description: Server error</code></pre><!--kg-card-end: code--><p>Notes:</p><ul><li>text/event-stream matches the SSE transport browsers understand.</li><li>itemSchema with oneOf captures normal token events, an optional final summary, and the explicit end‑of‑stream sentinel.</li><li>Errors follow regular non‑streaming JSON shapes with standard HTTP codes.</li></ul><h3 id="variant-json-lines-jsonl-streaming-for-sdks-and-backend-clients">Variant: JSON Lines (JSONL) streaming for SDKs and backend clients</h3><p>If your clients prefer framed JSON instead of SSE, you can offer application/jsonl with the same itemSchema. Each line is one JSON object.</p><!--kg-card-begin: code--><pre><code class="language-yaml">responses:
  "200":
    description: Stream of generation events via JSON Lines
    content:
      application/jsonl:
        itemSchema:
          oneOf:
            - type: object
              required: [type, token]
              properties:
                type:
                  type: string
                  enum: ["token"]
                token:
                  type: object
                  required: [text, index]
                  properties:
                    text: { type: string }
                    index: { type: integer, minimum: 0 }
            - type: object
              required: [type, data]
              properties:
                type:
                  type: string
                  enum: ["done"]
                data:
                  type: string
                  enum: ["[DONE]"]</code></pre><!--kg-card-end: code--><h3 id="designing-a-great-streaming-contract">Designing a great streaming contract</h3><ul><li>Be explicit about termination: Include a clear sentinel (e.g., event: "done" with data: "[DONE]") so clients can stop reading deterministically.</li><li>Separate event kinds: Use oneOf to model different event shapes (tokens vs. summary vs. control).</li><li>Carry minimal context: Include a token index, optional finish_reason, and a final summary with usage for billing/UX.</li><li>Document timeouts and reconnection: For SSE you can also expose an SSE retry interval; for clients, document expected timeouts and backoff.</li><li>Error semantics: Prefer failing fast (non‑200) before starting the stream. If you must signal errors mid‑stream, reserve a control event type (e.g., event: "error") and describe it in oneOf.</li></ul><h3 id="client-expectations">Client expectations</h3><ul><li>SSE clients: Use EventSource in browsers or an SSE library on servers. Parse event and data fields.</li><li>JSONL clients: Read line‑delimited JSON; process each line as one event.</li><li>Backpressure: Streaming responses are pull‑driven by TCP; keep events small and frequent for smoother UX.</li><li>Idempotency: If you support retries, include id/cursor fields so clients can resume safely.</li></ul><h3 id="why-this-is-useful-for-llms">Why this is useful for LLMs</h3><ul><li>Faster first token: Users see output immediately, improving perceived latency.</li><li>Progressive rendering: Stream tokens as they’re generated; UIs don’t block.</li><li>Richer telemetry: Emit intermediary signals (e.g., tool_call, reasoning, usage) as distinct event types.</li><li>Interoperability: A standardized spec makes SDKs and gateways simpler to build and maintain.</li></ul><!--kg-card-begin: hr--><hr><!--kg-card-end: hr--><p>See the OpenAPI 3.2 specification <a href="https://spec.openapis.org/oas/v3.2.0.html#complete-vs-streaming-content">here</a>.</p>]]></content:encoded></item><item><title><![CDATA[What’s Changing in OpenAPI 3.2 and Why You Should Care]]></title><description><![CDATA[See what's new in OpenAPI v3.2. Better structure, better auth support, better file and stream handling - no breaking changes.]]></description><link>https://developerhub.io/blog/whats-changing-in-openapi-3-2-and-why-you-should-care/</link><guid isPermaLink="false">68e25afdaa1efd06d433fe09</guid><category><![CDATA[OpenAPI]]></category><category><![CDATA[Engineering]]></category><dc:creator><![CDATA[Zaid Daba'een]]></dc:creator><pubDate>Sun, 05 Oct 2025 12:12:40 GMT</pubDate><media:content url="https://developerhub.io/blog/content/images/2025/10/openapi3.2.png" medium="image"/><content:encoded><![CDATA[<img src="https://developerhub.io/blog/content/images/2025/10/openapi3.2.png" alt="What’s Changing in OpenAPI 3.2 and Why You Should Care"><p>The OpenAPI spec has always been a careful evolution, not a revolution. Each release nudges things forward without breaking what’s already working. Version 3.2 continues that tradition - it’s incremental, compatible with 3.1, but still meaningful in the ways that matter most to developers, docs teams, and tool builders.</p><p>So, what’s changing? And what will it mean for the way we design and document APIs?</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://developerhub.io/blog/content/images/2025/10/openapi3.2-1.png" class="kg-image" alt="What’s Changing in OpenAPI 3.2 and Why You Should Care"></figure><!--kg-card-end: image--><h2 id="a-quick-overview-of-what-s-new"><strong>A Quick Overview of What’s New</strong></h2><p>Here are the highlights you’ll notice when 3.2 lands:</p><p><strong>1. OAuth device flow support</strong></p><p>You can now properly describe <strong>device authorisation flows</strong>. The spec also adds new metadata fields for OAuth 2 servers and marks a few older OAuth flows as deprecated.</p><p>➡️ This means cleaner, more accurate auth documentation and better generator support for modern login patterns.</p><p><strong>2. Structured tags</strong></p><p>Tags in 3.2 can be <strong>hierarchical</strong>, not just a flat list. You’ll be able to group operations under categories, subdomains, or even business units.</p><p>➡️ Expect to see better grouping in tools like DeveloperHub - fewer long scrolls, more structure.</p><p>Further reading: <a href="https://developerhub.io/blog/structured-tags-openapi-3-2/">Structured Tags in OpenAPI 3.2: Organising APIs the Way They Deserve</a></p><p><strong>3. A new “QUERY” HTTP method</strong></p><p>OpenAPI is adding support for the QUERY method alongside the usual GET/POST/PUT. It’s mostly for APIs that expose custom, read-only search endpoints.</p><p>➡️ This brings a few niche APIs out of the “custom extension” shadows and into proper, spec-supported territory.</p><p>Further reading: <a href="https://developerhub.io/blog/the-new-query-method-in-openapi-3-2-a-small-addition-that-clears-up-a-big-ambiguity/">The New QUERY Method in OpenAPI 3.2: A Small Addition That Clears Up a Big Ambiguity</a></p><p><strong>4. Better multipart handling</strong></p><p>Multipart/form-data definitions are now clearer, especially when you’re mixing file uploads with structured metadata.</p><p>➡️ If you’ve ever struggled to describe an endpoint that uploads an image plus a JSON blob of details, this one’s for you.</p><p><strong>5. Event streams and real-time patterns</strong></p><p>The spec now acknowledges streaming APIs like server-sent events, as first-class citizens.</p><p>➡️ Tooling can start generating and validating them instead of treating streams as weird one-off hacks.</p><p>Further reading: <a href="https://developerhub.io/blog/event-streaming-in-openapi-3-2-what-changed-and-why-it-matters/">Event streaming in OpenAPI 3.2: What changed and why it matters</a></p><p><strong>6. Modernised XML modelling</strong></p><p>XML definitions get a significant upgrade. You can now describe attributes, nested structures, and mixed content far more accurately, without awkward workarounds or vendor extensions.</p><p>➡️ Enterprise teams with XML based systems finally gain clean, precise schema modelling that lines up with how their APIs actually behave.</p><p>Further reading: <a href="https://developerhub.io/blog/xml-modelling-in-openapi-3-2-a-quiet-but-important-upgrade-for-enterprise-teams/">XML Modelling in OpenAPI 3.2: A Quiet but Important Upgrade for Enterprise Teams</a></p><!--kg-card-begin: hr--><hr><!--kg-card-end: hr--><h2 id="why-this-release-feels-different"><strong>Why This Release Feels Different</strong></h2><p>OpenAPI 3.2 isn’t flashy but it’s pragmatic. It focuses on the real pain points that show up when you scale: messy docs, patchy auth support, and unclear streaming behavior.</p><p>Here’s what that means in practice:</p><ul><li><strong>Cleaner documentation:</strong> Hierarchical tags make large APIs actually browsable.</li><li><strong>Smarter SDKs:</strong> Code generators can finally infer correct flows for device-based logins.</li><li><strong>More predictable testing:</strong> Validators understand streaming and multipart payloads instead of ignoring them.</li><li><strong>Low-risk adoption:</strong> Everything is still compatible with 3.1. You can move gradually, feature by feature.</li></ul><p>It’s the kind of release that quietly improves your workflow without demanding a rewrite.</p><!--kg-card-begin: hr--><hr><!--kg-card-end: hr--><h2 id="a-simple-upgrade-path"><strong>A Simple Upgrade Path</strong></h2><p>Migrating to 3.2 should be painless:</p><ol><li>Update your OpenAPI toolchain (linters, generators, validators).</li><li>Change the version number in your spec to openapi: 3.2.0.</li><li>Start using new features as you need them — nested tags, device flows, multipart fixes.</li><li>Validate your specs early in CI to make sure your tools all agree.</li></ol><p>Because 3.2 is a compatible update, you can introduce new patterns gradually while your existing specs keep working.</p><!--kg-card-begin: hr--><hr><!--kg-card-end: hr--><h2 id="looking-ahead-the-road-to-4-0-moonwalk-"><strong>Looking Ahead: The Road to 4.0 (“Moonwalk”)</strong></h2><p>3.2 also lays groundwork for the future. The OpenAPI community is already experimenting with 3.3 and the bigger 4.0 (Moonwalk) release, which aims to simplify nested structures, improve parameter-based responses, and extend support beyond REST.</p><p>Think of 3.2 as a safe stepping stone: you get a few of the next-gen ideas today, without waiting for the big version bump.</p><!--kg-card-begin: hr--><hr><!--kg-card-end: hr--><h2 id="final-thoughts"><strong>Final Thoughts</strong></h2><p>If you live in API specs all day, this update is worth your attention. You’ll spend less time fighting your documentation tools and more time focusing on the design itself.</p><p>In short:</p><p>✅ Better structure</p><p>✅ Better auth support</p><p>✅ Better file and stream handling</p><p>✅ Zero breaking changes</p><p>It’s the kind of quiet progress that keeps the OpenAPI ecosystem healthy — and keeps your documentation future-proof.</p><!--kg-card-begin: hr--><hr><!--kg-card-end: hr--><p>Read the full specification here: <a href="https://spec.openapis.org/oas/v3.2.0.html">https://spec.openapis.org/oas/v3.2.0.html</a></p>]]></content:encoded></item><item><title><![CDATA[7 must-have features in a documentation editor in 2025]]></title><description><![CDATA[Selecting the right documentation editor is essential for technical writers. Look for features like advanced formatting, customizable blocks, version control, and powerful search functionality. These tools enhance collaboration and ensure your documentation is clear, accessible, and easy to manage.]]></description><link>https://developerhub.io/blog/what-to-look-for-in-a-documentation-editor/</link><guid isPermaLink="false">670c108cefce3206e1d89ff9</guid><category><![CDATA[Documentation]]></category><dc:creator><![CDATA[Zaid Daba'een]]></dc:creator><pubDate>Sun, 13 Oct 2024 19:01:46 GMT</pubDate><content:encoded><![CDATA[<p>In the world of technical writing, having the right tools can make all the difference. Whether you’re just starting out as a junior technical writer or you’re a seasoned professional still working with traditional documentation tools, choosing a modern, feature-rich documentation editor is crucial to your workflow.</p><p>Documentation has evolved beyond simple text formatting, now requiring dynamic features like multimedia support, collaboration tools, and robust search functionalities. A good documentation editor not only helps you create clear and concise content but also streamlines the entire documentation process—from drafting and editing to publishing and maintaining.</p><p>In this post, we’ll explore the key features to look for in a documentation editor that can enhance your productivity and ensure your content is easy to manage, navigate, and maintain. Whether you’re transitioning to a SaaS platform or simply upgrading your existing toolset, these factors will help you make an informed decision.</p><h2 id="1-formatting-options">1. Formatting Options</h2><p>A robust documentation editor should provide a variety of formatting tools to help you organize and present your content clearly. Basic text styling, such as headings, bold, italics, and bulleted or numbered lists, is essential for structuring your documents. The ability to apply consistent and easy-to-read formatting is key to maintaining readability, especially in technical documentation where clarity is paramount.</p><p>In addition, look for features that allow for more sophisticated formatting, such as the ability to create multi-level lists, customize fonts and spacing, and insert tables of contents. The ability to manage styles centrally ensures consistency throughout your documentation without needing to adjust individual sections manually.</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://developerhub.io/blog/content/images/2024/10/image.png" class="kg-image"></figure><!--kg-card-end: image--><h2 id="2-blocks-and-custom-elements">2. Blocks and Custom Elements</h2><p>Beyond text formatting, a high-quality documentation editor should offer a range of blocks and custom elements that you can seamlessly add to your content. These elements allow you to present complex information more interactively and visually. Some essential blocks to look for include:</p><p>•	<strong>Code Blocks</strong>: Displaying code snippets with syntax highlighting for multiple languages.</p><p>•	<strong>Callouts</strong>: Highlighting important information, such as warnings, tips, or best practices, with visually distinct boxes.</p><p>•	<strong>Images and Videos</strong>: Embedding visuals to make your documentation more engaging. The editor should support common video providers (e.g., YouTube, Vimeo) and offer customisation options like captions for SEO, resizing, and alignment.</p><p>•	<strong>Custom HTML Blocks</strong>: Flexibility to add custom HTML for specialised content or embedding third-party services.</p><p>•	<strong>Tabs</strong>: Organising content into tabs for better navigation and structure.</p><p>•	<strong>Integrations</strong>: Embedding content from external providers like Google Drive, GitHub, or data visualisations from analytics platforms.</p><p>Each one of those blocks can be really simple or with extensive functionality, so double-check what is available before taking a decision.</p><h2 id="3-import-and-export-options"><strong>3. Import and Export Options</strong></h2><p>As a technical writer, flexibility in how you manage your content is key. A good documentation editor should support smooth import and export options to make transitions between tools or formats as seamless as possible. Whether you’re migrating legacy content or sharing documents with external teams, these capabilities save time and effort.</p><p><strong>Importing</strong>: Look for an editor that can import various file formats such as Markdown, HTML, or Word documents. This allows you to quickly bring in existing content without losing formatting or structure. For teams that collaborate across different platforms, import support for third-party systems (like Confluence or Google Docs) can be a significant advantage.</p><p><strong>Exporting</strong>: Equally important is the ability to export content into multiple formats. Common options like PDF, HTML, or Markdown allow you to publish your documents in different mediums and formats. Moreover, the ability to export a full content archive, including images and attachments, ensures you can back up or transfer your work without hassle.</p><h2 id="4-copy-paste-and-reordering-capabilities">4. Copy, Paste, and Reordering Capabilities</h2><p>Creating documentation often involves moving content around, repurposing sections, or copying elements between different documents. A solid documentation editor should make these actions simple and intuitive.</p><p><strong>Copy and Paste</strong>: You should be able to effortlessly copy content between different sections, documents, or even between external sources and your editor. Maintaining formatting during copy-pasting—especially when dealing with tables, images, or code blocks—is essential to preserve consistency and avoid rework.</p><p><strong>Reordering Content</strong>: Documentation often requires restructuring as content evolves. Look for an editor that enables you to easily drag and drop blocks of text, tables, images, or other elements. This helps keep the content flexible and easy to manage, especially when working with large, complex documents.</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://developerhub.io/blog/content/images/2024/10/reorder.gif" class="kg-image"></figure><!--kg-card-end: image--><h2 id="5-advanced-table-features">5. Advanced Table Features</h2><p>Tables are essential in technical documentation for organising complex data or comparisons. A modern documentation editor should go beyond basic table creation, offering advanced features to enhance the way you present tabular data.</p><p><strong>Merging Cells</strong>: The ability to merge cells horizontally or vertically allows you to create more complex layouts within a table, making it easier to group related information and improve readability.</p><p><strong>Resizing Columns</strong>: Flexibility to resize columns manually ensures that your data is displayed in an easy-to-read format, without awkward wrapping or misaligned text.</p><p><strong>Images in Tables</strong>: Some documentation calls for visual aids within tables. Look for an editor that allows you to insert images directly into table cells, which can be useful for comparisons or feature showcases.</p><p>With these capabilities, you can create dynamic and professional-looking tables that communicate complex information clearly.</p><h2 id="6-search-functionality-and-ai-integration">6. Search Functionality and AI Integration</h2><p>One of the most crucial features in any documentation editor is its search capability. As documentation grows, both writers and readers need a fast and efficient way to locate specific information.</p><p><strong>Content Coverage</strong>: A good editor should search through not only the body text but also through more detailed parts of your content, such as captions, alt text for images, and even within embedded media. This ensures that no important information is overlooked during searches.</p><p><strong>Search Customisation</strong>: Advanced search features like filters and tagging can make navigating large documents easier. Additionally, search analytics can really help you understand how the documentation is being used.</p><p><strong>Natural Language Search &amp; AI Q&amp;A</strong>: As AI-powered tools become more common, documentation editors are integrating natural language search features. This allows users to search for content in the same way they would ask a question, improving the usability of your documentation for non-technical audiences. Additionally, some platforms are introducing AI-driven question-and-answer systems, where the editor can automatically suggest relevant content or solutions based on user queries. Beware that some tools might charge you big $$$ for such features and others provide it for free.</p><p>With strong search functionality and AI capabilities, your documentation becomes more accessible, improving both the writer and reader experience.</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://developerhub.io/blog/content/images/2024/10/image-1.png" class="kg-image"></figure><!--kg-card-end: image--><h2 id="7-version-control">7. Version Control</h2><p>For technical writers, maintaining a clean version history is crucial, especially when multiple people are collaborating on the same document or when updates need to be tracked over time. A well-built documentation editor should offer robust version control features.</p><p><strong>Track Changes</strong>: Writers should be able to track changes made to a document, view who made specific edits, and when. This helps teams stay organized and ensures transparency in the writing process.</p><p><strong>Version History &amp; Rollback</strong>: Look for an editor that provides a comprehensive version history. This feature allows you to review previous drafts of your document and, if necessary, restore an older version. It’s particularly useful when a document undergoes many revisions or when content needs to be reverted due to incorrect changes.</p><p><strong>Commenting on Versions</strong>: Being able to comment on different versions or revisions of a document ensures that any major changes can be documented or justified, adding context to why certain edits were made.</p><h2 id="conclusion">Conclusion</h2><p>Choosing the right documentation editor is an important decision for any technical writer, whether you’re just starting out or transitioning from a traditional toolset to a more modern, SaaS-based platform. The features we’ve outlined—ranging from robust formatting options and block customisation to version control and advanced search functionality—are all critical in ensuring your documentation is easy to create, maintain, and scale.</p><p>When evaluating different editors, focus on those that offer the flexibility and control needed to adapt to your workflow, enhance collaboration, and ensure your content remains clear and accessible. With the right tools in hand, you’ll be able to streamline your documentation process and produce high-quality content that serves your audience effectively.</p>]]></content:encoded></item><item><title><![CDATA[Dark Theme - CSS Migration]]></title><description><![CDATA[Dark theme is out now! Let those eyes rest.]]></description><link>https://developerhub.io/blog/dark-theme-css-migration/</link><guid isPermaLink="false">64a52dc0a44f3705356fde26</guid><category><![CDATA[Branding]]></category><dc:creator><![CDATA[Zaid Daba'een]]></dc:creator><pubDate>Thu, 06 Jul 2023 11:19:48 GMT</pubDate><media:content url="https://developerhub.io/blog/content/images/2023/07/screely-1688551289027-1.png" medium="image"/><content:encoded><![CDATA[<img src="https://developerhub.io/blog/content/images/2023/07/screely-1688551289027-1.png" alt="Dark Theme - CSS Migration"><p>DeveloperHubbers rejoice, we now have a dark theme 🎉 </p><p>The dark theme extends throughout the documentation pages, API references, landing page and the search functionality.</p><p>It is possible to set the dark theme by default for your readers, and also to provide them with a toggle in the top navigation for them to change it.</p><p>Here's how it looks:</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://developerhub.io/blog/content/images/2023/07/screely-1688551289027.png" class="kg-image" alt="Dark Theme - CSS Migration"></figure><!--kg-card-end: image--><p>And the same page in light theme:</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://developerhub.io/blog/content/images/2023/07/screely-1688551347714.png" class="kg-image" alt="Dark Theme - CSS Migration"></figure><!--kg-card-end: image--><!--kg-card-begin: hr--><hr><!--kg-card-end: hr--><h1 id="great-how-can-i-use-it">Great, how can I use it?</h1><p>To <a href="https://docs.developerhub.io/support-center/theme">enable dark theme</a>, you can select it from the "Edit Colours" control at the top right.</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://developerhub.io/blog/content/images/2023/07/image.png" class="kg-image" alt="Dark Theme - CSS Migration"></figure><!--kg-card-end: image--><p>Check Theme Toggle if you wish to enable your readers to be able to modify the theme for themselves too.</p><p>If you have heavy custom CSS modifications, then you might need to test the existing CSS changes and make changes accordingly. See the Q&amp;A below.</p><h2 id="migrating-css">Migrating CSS</h2><p>To test dark mode on readers' site without saving the setting on the project, open your DevTools and run the following code in console:</p><!--kg-card-begin: code--><pre><code class="language-JS">window.setTheme('dark');

// Revert with window.setTheme('light');</code></pre><!--kg-card-end: code--><p>At this point, feel free to make draft CSS changes. Once you're confident of the changes, publish the CSS changes and set the dark theme as default.</p><h2 id="customising-css">Customising CSS</h2><p>Our CSS has had a good clean up during the creation of the dark theme. With the introduction of dark theme, we have added more CSS variables that control the look and feel which you can modify.</p><!--kg-card-begin: code--><pre><code class="language-CSS">  --bg-color: #FFF; /* Background color */
  --alt-bg-color: #FFF;  /* Used in some controls for differentiating from background color in dark mode */
  --font-color: #333; /* Font color */
  --heading-color: #444; /* Heading color */
  --category-color: #555; /* Category (in index) color */
  --toc-link-color: #666;  /* TOC text color */
  --table-second-color: #FAFAFA;  /* Alternating table background color */
  --page-border-color: #F1F1F1;  /* Left and bottom page border color */
  --inline-code: #444444; /* Your inline code color */
  --inline-code-bg: #f5f7f7; /* Your inline code background color */</code></pre><!--kg-card-end: code--><p>When dark theme is activated, a class <code>.dark-mode</code> is set on <code>document.body</code> which causes the variables to change. Most of the visual changes happen due to the variables change, and only a few other changes are due to specific CSS rules which are applied when <code>.dark-mode</code> is set. </p><h2 id="qa">Q&amp;A</h2><p>Q: Editor looks funny even though I do not have dark theme enabled. How can I solve that?</p><p>A: This is probably because you have changed the background/font colour directly using CSS previously (not using the new variables), and have not used the <code>.customise.live</code> selector as in the <a href="https://docs.developerhub.io/support-center/custom-css#css-best-practices">best practices</a>. Remove these CSS rules to fix it.</p><!--kg-card-begin: hr--><hr><!--kg-card-end: hr--><p>Q: My header and link colours do not look good in both light and dark themes. Can I set them up individually?</p><p>A: Yes. Set up the colours as usual using the Edit Colours control for light theme, and add the following CSS to change the colour when dark theme is used:</p><!--kg-card-begin: code--><pre><code class="language-CSS">.dark-mode {
  --brand: yellow;
  --link: red;
}</code></pre><!--kg-card-end: code--><!--kg-card-begin: hr--><hr><!--kg-card-end: hr--><p>Q: I already have created a dark theme using CSS. Can I keep using mine?</p><p>A: While it's possible to keep using yours, we highly recommend that you use our own. That's because 1. Our product is ever-changing and you would need to keep customising your own CSS for dark mode when new features are introduced, 2. Some users do not like the dark theme and would prefer to use the light theme, providing them with a toggle would make their experience better on your docs.</p><p>Furthermore, if our exact dark theme colours are not what you need, you can now directly modify them using the CSS variables above.</p><!--kg-card-begin: hr--><hr><!--kg-card-end: hr--><p>Q: My frontend application version has been pinned. What do I do now?</p><p>A: We pin your frontend application version if you have heavy CSS modifications and we suspect that our CSS is going to conflict with your custom CSS which then would degrade the readers experience. See <a href="https://docs.developerhub.io/support-center/custom-css#migrating-to-latest-frontend-application-version">how to migrate</a> to latest application version. <a href="https://docs.developerhub.io/support-center/contact-us">Contact us</a> if you needed further help.</p>]]></content:encoded></item><item><title><![CDATA[3 Essential Types of Documentation for Tech Businesses]]></title><description><![CDATA[Product documentation is a type of documentation that provides information about the features and functionality of a product]]></description><link>https://developerhub.io/blog/3-essential-types-documentation-tech-businesses/</link><guid isPermaLink="false">639aea8aa44f3705356fddd9</guid><dc:creator><![CDATA[Zaid Daba'een]]></dc:creator><pubDate>Thu, 15 Dec 2022 13:52:15 GMT</pubDate><media:content url="https://developerhub.io/blog/content/images/2022/12/blog-doc-type-1.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://developerhub.io/blog/content/images/2022/12/blog-doc-type-1.jpg" alt="3 Essential Types of Documentation for Tech Businesses"><p>Any product, service, or project needs documentation. Documentation provides instructions and information to users, developers, and stakeholders helping them understand and use a product. There are many types of documentation, each serves a different purpose and addresses the needs of a specific audience. Over the next few minutes, we’ll discuss three common types of documentation that tech businesses have: product documentation, knowledge base, and API references.</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://developerhub.io/blog/content/images/2022/12/blog-doc-type-2.jpg" class="kg-image" alt="3 Essential Types of Documentation for Tech Businesses"></figure><!--kg-card-end: image--><h2 id="what-is-product-documentation"><strong>What Is Product Documentation?</strong></h2><p>Product documentation is a type of documentation that provides information about the features and functionality of a product. It explains what the product does, how it works, and how to use it. Product documentation typically originates from the product development team and is designed to help users understand and use the product effectively.</p><p>Product documentation can take many different forms, including user manuals, tutorials, and online help guides. It may be provided in printed or digital form, and may be included with the product itself or made available online. Product documentation typically covers a wide range of topics, including installation and setup, user interface and navigation, features and functionality, and troubleshooting and support.</p><p>One of the key advantages of product documentation is that it helps users to understand and use the product effectively. By providing clear and concise instructions and explanations, product documentation helps users to quickly learn how to use the product and take advantage of its features and functionality. This can save users time and frustration, and can help to increase the overall satisfaction with the product.</p><p>Another advantage of product documentation is that it can help to reduce the need for customer support. By providing clear and comprehensive information, product documentation can help users to solve problems and troubleshoot issues on their own, without having to contact customer support. This can save time and resources for both users and the product development team, and can help to improve the overall customer experience.<br></p><h2 id="what-are-knowledge-bases"><strong>What Are Knowledge Bases?</strong></h2><p>Knowledge base is a type of documentation that focuses on problem solving and customer support. Unlike product documentation, which originates from the product development team, knowledge base documentation typically originates from customer support requests. It is designed to provide users with the information and instructions they need to troubleshoot and resolve common issues and problems.</p><p>A knowledge base is typically organised into a series of articles or entries, each addressing a specific problem or issue. These articles may be organised by topic, product, or customer support category, and may include step-by-step instructions, diagrams, and screenshots to help users understand and follow the instructions. Knowledge base articles may be written by the product development team or by customer support specialists, and may be reviewed and updated regularly to ensure accuracy and relevance.</p><p>One of the key advantages of a knowledge base is that it provides users with quick and easy access to information and solutions to common problems. By organizing information into a searchable format, a knowledge base allows users to quickly find the information they need, without having to contact customer support. This can save users time and frustration, and can help to improve the overall customer experience.</p><p>Another advantage of a knowledge base is that it can help to reduce the workload of the customer support team. By providing a comprehensive resource of information and solutions, a knowledge base can help customer support specialists to quickly and accurately respond to customer inquiries, without having to research and troubleshoot each issue individually. This can save time and resources for the customer support team, and can help to improve their overall efficiency and effectiveness.</p><h2 id="what-is-an-api-reference"><strong>What is an API Reference?</strong></h2><p>API references are a type of documentation that provides information and instructions for developers who are using an application programming interface (API). An API is a set of rules and protocols that allow different software applications to communicate with each other and share data and functionality. API references provide developers with the information they need to understand how an API works, and how to use it to integrate their own applications with the API.</p><p>API references typically include detailed information about the API's functions, methods, and parameters, as well as code examples and sample requests and responses. They may also include information about authentication and security, error handling, and other technical details. API references are typically written by the API development team, and may be updated regularly to reflect changes and improvements to the API.<br></p><p>One of the key advantages of API references is that they provide developers with the information they need to effectively use an API. By providing detailed and accurate information, API references can help developers to quickly and easily integrate their applications with the API, without having to spend time and resources on trial and error. This can save developers time and frustration, and can help to improve the overall quality and usability of their applications.</p><h2 id="how-they-all-function-together"><strong>How They All Function Together</strong></h2><p>The main difference between these types of documentation is their purpose and intended audience. Product documentation is designed to help users understand and use a product effectively, while knowledge bases are focused on providing information and solutions to common problems. APIs, on the other hand, are designed for developers, providing them with the information they need to integrate their own software with other systems or services.</p><p>All three types of documentation provide information and instructions to help users, developers, or stakeholders understand and use a product, service, or system. They may be provided in different forms, including written documents, online guides, or reference materials, depending on the needs of the audience. They should all be updated and revised regularly to ensure that the information they provide is accurate, relevant, and up-to-date. Documenting with all of these methods can help to improve user experience, reduce the need for customer support, and increase the overall satisfaction with a product, service, or system.<br>If you're looking to easily create and integrate product documentation for your products and software services, you should consider using a documentation tool like<a href="https://developerhub.io/"> DeveloperHub</a>. Our tools allow you to collaboratively write, publish, review, analyse and collect feedback on personalised customer-facing documentation the modern way. With no technical skills required or deployment time wasted, you can get your docs up and publicly viewable quickly!</p>]]></content:encoded></item><item><title><![CDATA[DeveloperHub in 2021]]></title><description><![CDATA[We really believe that we built the best customer-facing documentation platform out there - unparalleled to any other competitor.]]></description><link>https://developerhub.io/blog/year-3-is-done/</link><guid isPermaLink="false">610e5f23a44f3705356fdced</guid><category><![CDATA[Company Updates]]></category><dc:creator><![CDATA[Zaid Daba'een]]></dc:creator><pubDate>Sat, 07 Aug 2021 14:39:01 GMT</pubDate><media:content url="https://developerhub.io/blog/content/images/2021/08/download.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://developerhub.io/blog/content/images/2021/08/download.jpg" alt="DeveloperHub in 2021"><p>Our third year of operation is over and we couldn't have asked for a more exciting year.</p><p>We really believe that we built the best customer-facing documentation platform out there - unparalleled to any other competitor. We have built amazing relationships with our customers and worked on bringing you features that no single platform ever had, to empower you to do things that you never imagined you could do.</p><h3 id="here-s-a-recap-of-2020-2021">Here's a recap of 2020-2021 </h3><p>From our <a href="https://docs.developerhub.io/support-center/what-s-new">What's New</a> page, we:</p><ul><li>Shipped 92 new features,</li><li>Fixed 53 bugs you reported,</li><li>Had 25 improvements on our existing features,</li><li>Had 2 security updates.</li></ul><p>In numbers, so far we now have more than:</p><ul><li>129,000 pages so far,</li><li>1300 API References uploaded,</li><li>A WHOPPING 224,000 edits.</li></ul><p>There's an announcement of a new product update as well after this.</p><h2 id="let-s-look-back-on-an-amazing-year-with-developerhub"><strong>Let's look back on an amazing year with DeveloperHub</strong></h2><p>Here are some of the features that we have built throughout 2020-2021:<br><br></p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://developerhub.io/blog/content/images/2021/08/image.png" class="kg-image" alt="DeveloperHub in 2021"></figure><!--kg-card-end: image--><p><strong><a href="https://docs.developerhub.io/support-center/collaboration">User Roles</a></strong></p><p>Give every user on DeveloperHub the permissions they only need to make the perfect review process.</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://developerhub.io/blog/content/images/2021/08/image-1.png" class="kg-image" alt="DeveloperHub in 2021"></figure><!--kg-card-end: image--><p><strong><a href="https://docs.developerhub.io/support-center/dashboard">Dashboard</a></strong></p><p>Everything you need to start your day with in one view. See all comments on the project, what has been going on lately, and which pages need your help right away.</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://developerhub.io/blog/content/images/2021/08/image-2.png" class="kg-image" alt="DeveloperHub in 2021"></figure><!--kg-card-end: image--><p><strong><a href="https://docs.developerhub.io/support-center/previewing-documentation#embed-mode">Embed Mode</a></strong></p><p>Embed your docs in a widget on your own website keeping them in context.</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://developerhub.io/blog/content/images/2021/08/image-3.png" class="kg-image" alt="DeveloperHub in 2021"></figure><!--kg-card-end: image--><p><strong><a href="https://docs.developerhub.io/support-center/page-history">Visual Diff</a></strong></p><p>See how every edit history has changed the documentation with a visual diff.</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://developerhub.io/blog/content/images/2021/08/image-4.png" class="kg-image" alt="DeveloperHub in 2021"></figure><!--kg-card-end: image--><p><strong><a href="https://docs.developerhub.io/support-center/api-references">Major Update to API References</a></strong></p><p>API References have received so much love. From supporting OpenAPI 3, to a slight redesign, to having more languages for auto-generated requests, and so much more!</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://developerhub.io/blog/content/images/2021/08/image-5.png" class="kg-image" alt="DeveloperHub in 2021"></figure><!--kg-card-end: image--><p><strong><a href="https://talk.developerhub.io">Community Forums</a></strong></p><p>We released our own <a href="https://talk.developerhub.io">Community Forums</a> so you have more transparency on what is going on, and to open a directly channel of communication between our customers.</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://developerhub.io/blog/content/images/2021/08/image-6.png" class="kg-image" alt="DeveloperHub in 2021"></figure><!--kg-card-end: image--><p><strong><a href="https://docs.developerhub.io/support-center/search-analytics">Search Analytics</a></strong></p><p>Understand how your readers use search, what they are missing and what they look for most, so you can keep on enhancing your documentation.</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://developerhub.io/blog/content/images/2021/08/image-7.png" class="kg-image" alt="DeveloperHub in 2021"></figure><!--kg-card-end: image--><p><strong><a href="https://docs.developerhub.io/support-center/feedback">Feedback</a></strong></p><p>Let your readers tell you what they like and don't like, right from the documentation.</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://developerhub.io/blog/content/images/2021/08/image-8.png" class="kg-image" alt="DeveloperHub in 2021"></figure><!--kg-card-end: image--><p><strong><a href="https://docs.developerhub.io/support-center/hosting">Hosting</a></strong></p><p>Our hosting options got a huge boost. Host DeveloperHub docs on your own existing website or on a subdomain of your website. You can even host multiple projects on the same domain!</p><!--kg-card-begin: hr--><hr><!--kg-card-end: hr--><h2 id="the-big-announcement">The Big Announcement</h2><h3 id="custom-login-flow"><a href="https://docs.developerhub.io/support-center/custom-login">Custom Login Flow</a></h3><p>Log in your readers to your docs securely with <a href="https://docs.developerhub.io/support-center/custom-login">JWT Tokens</a>.</p><p><strong>How is this any better than password/link sharing?</strong></p><p>By using JWT login:</p><ul><li>You control who has access to your docs without having to share a global password/link.</li><li>You can <a href="https://docs.developerhub.io/support-center/personalised-docs">personalise</a> the docs to the logged in reader.</li><li>You control when the access expires.</li></ul><p>See more on our docs for <a href="https://docs.developerhub.io/support-center/custom-login">how to implement it and use it</a>.</p>]]></content:encoded></item><item><title><![CDATA[Case Study: Why should you move from WordPress to a modern documentation system]]></title><description><![CDATA[Move from static CMS to DeveloperHub to boost your team's efficiency by 3X.]]></description><link>https://developerhub.io/blog/case-study/</link><guid isPermaLink="false">60173d2da44f3705356fdc55</guid><category><![CDATA[Case Study]]></category><dc:creator><![CDATA[Zaid Daba'een]]></dc:creator><pubDate>Mon, 01 Feb 2021 01:59:43 GMT</pubDate><media:content url="https://developerhub.io/blog/content/images/2021/02/wordpress-to-developerhub.jpg" medium="image"/><content:encoded><![CDATA[<h2 id="outcomes">Outcomes</h2><ul><li>✅ <strong>Zero</strong> dependency on developers for hosting and managing documentation look and feel</li><li>✅ Reduce technical writing resource requirements by <strong>50%</strong></li><li>✅ Save up to <strong>30%</strong> of time spent in content development</li></ul><h2 id="the-benefits">The Benefits</h2><ul><li>Empowered technical writers to handle high-frequency documentation updates, increased scalability needs of continuously evolving product documentation and boost productivity of content development.</li><li> Allows technical writers to focus on content development rather than worry about information hosting and layout dependencies. At the same time, the tool gives control by allowing technical writer to retain the flexibility of <a href="https://docs.developerhub.io/support-center/customising-visuals#customising-css">customisable look and feel</a> in a contemporary documentation layout.</li><li>Intuitive and easy to build simple navigation controls in documentation make it easy for readers to access and search for information.</li><li>WYSIWYG tooling makes <a href="https://docs.developerhub.io/support-center/collaboration">collaboration</a> easier among various technical documentation stakeholders involved in content development, review and approval.</li><li>Accelerates quality documentation delivery with modern look and feel.</li></ul><!--kg-card-begin: image--><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://developerhub.io/blog/content/images/2021/02/wordpress-to-developerhub-1.jpg" class="kg-image" alt="Case Study: Why should you move from WordPress to a modern documentation system"><figcaption>WordPress to DeveloperHub: 3X Boost in writers efficiency</figcaption></figure><!--kg-card-end: image--><h2 id="company-overview">Company Overview</h2><img src="https://developerhub.io/blog/content/images/2021/02/wordpress-to-developerhub.jpg" alt="Case Study: Why should you move from WordPress to a modern documentation system"><p>Founded in 2014, the studied California based company is the leading software platform provider for agile data. The company counts some of the world's largest financial, retail, technology, healthcare, oil &amp; gas, pharmaceutical and manufacturing companies in the Fortune 100 and Global Fortune 500 as its customers.</p><p>Due to the nature of their documentation and business, the customer has requested their name to be redacted from this case study which was first published in 2019.</p><p>The company hosts over 1000 pages of documentation with DeveloperHub as of the publishing date.</p><h2 id="documentation-objectives">Documentation Objectives</h2><p>The technical writing team is entrusted with the responsibility of creating quality documentation assets that enhance their customer experience. Working within the time and resource constraints demanded by a continuously evolving cutting edge technology product, the technical writers collaborate across geographies for writing, reviewing, publishing and sharing product information with key stakeholders.</p><h2 id="the-challenge">The Challenge</h2><h5 id="engineering-resources-were-a-bottleneck">Engineering resources were a bottleneck</h5><p>Before switching over to <a href="https://developerhub.io">DeveloperHub</a>, the studied company used WordPress based content development process that required additional support for hosting their documentation created using WordPress tooling. Following are some of the key issues that made them look for a better solution:</p><ul><li>WordPress usage required dealing with HTML and CSS formats in order to define and manage their documentation layout. This caused an additional dependency of technical writers and content developers on software engineering resources with the requisite skills to handle documentation layout modifications and address issues. The added complexity slowed the rate of content development.</li><li>Hosting of WordPress based documentation was handled by another development resource located in a different geography and that increased dependency and turn-around time for documentation updates.</li><li>Creating contemporary look and feel for documentation required significant effort and resource outside the technical writer’s domain of expertise. Managing change was tedious.</li><li>Another limiting factor with their old documentation process was the complexity in managing the overall documentation structure and its organisation to aid ease of information access using navigation controls.</li><li>The new team members in technical writing team faced steep learning curve with their documentation system that hampered productivity.</li></ul><h2 id="why-developerhub">Why DeveloperHub?</h2><p>The complete documentation is now written and published using <a href="https://developerhub.io">DeveloperHub</a>. The documentation productivity is no longer hostage to the many issues they were facing with content development, the <a href="https://docs.developerhub.io/support-center/custom-css">CSS</a>, plugins and hosting with their older documentation system. With <a href="https://developerhub.io">DeveloperHub</a> all the documentation development, review and publishing processes are just a single button-click and that saves a lot of time for them.</p><p>Technical writers can focus more on documentation instead of spending time looking for developer resources to help them in fixing issues related to documentation management and hosting. New team members can ramp up faster as the documentation editor is very intuitive, unlike the earlier tool that had a steep learning curve and additional skills besides content development. With <a href="https://developerhub.io">DeveloperHub</a> documentation cycles and updates become simpler and faster, giving a boost to API documentation for them.</p><p>Their users find <a href="https://developerhub.io">DeveloperHub</a> easy to use tool for documentation. The frequent updates and enhancements make the documentation process very interesting and highly productive. The look and feel of the documents generated using DeveloperHub matches closely with what the technical writers require for ease of information access. In addition, the technical writers experienced greater flexibility in content development with the product’s customisation capabilities such as fonts, colours, simple, intuitive navigation controls and various other layout options. Lastly, continuous support from the DeveloperHub support team ensured that all the challenges faced by the information development team were addressed on time helping them in timely release of important product information.</p><h2 id="summary">Summary</h2><p>Technical writing process got a <strong>3X boost</strong> with the adoption of <a href="https://developerhub.io">DeveloperHub</a> managed documentation service. With its powerful, Medium-like modern <a href="https://developerhub.io/documentation">WYSIWYG editor</a>, <a href="https://developerhub.io">DeveloperHub</a> managed documentation hosting service helped the studied company in writing beautiful user guides, product and API documentation with no dependency on documentation hosting or layout tooling knowledge. Documentation team can now publish it online by a simple click of a button!</p><!--kg-card-begin: hr--><hr><!--kg-card-end: hr--><p>Do you need help moving from a static CMS to a realtime modern collaboration tool for customer-facing documentation? Give us a <a href="https://developerhub.io">shout</a>.</p>]]></content:encoded></item><item><title><![CDATA[Establishing a Review Process]]></title><description><![CDATA[<p>One of the most interesting, and difficult, aspects of technical writing is the synthesis of subject matter expertise with the needs of various users. You must simultaneously be the plain-language advocate for the novice user while also ensuring that savvy developers can get everything they need from the documentation. It’</p>]]></description><link>https://developerhub.io/blog/establish-your-documentation-review-process/</link><guid isPermaLink="false">5f4c1839a44f3705356fdb92</guid><category><![CDATA[Process]]></category><dc:creator><![CDATA[Zaid Daba'een]]></dc:creator><pubDate>Tue, 13 Oct 2020 23:10:56 GMT</pubDate><media:content url="https://developerhub.io/blog/content/images/2020/10/blog-review.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://developerhub.io/blog/content/images/2020/10/blog-review.jpg" alt="Establishing a Review Process"><p>One of the most interesting, and difficult, aspects of technical writing is the synthesis of subject matter expertise with the needs of various users. You must simultaneously be the plain-language advocate for the novice user while also ensuring that savvy developers can get everything they need from the documentation. It’s tough, but great documentation provides such myriad benefits when done correctly (reduced support load, increased satisfaction, easier sales conversions), it’s worth exploring all the available assets you have to get it right. Having an ironclad review process is a surefire way to progress in that direction, but your review process is likely constrained by time and the schedules of your team members. So, how can you design a review process that’ll be efficient, make end-users happy, and properly leverage your team members’ time? </p><p>While there may not be a hard-and-fast rule for review processes, the following guiding principles are a great start for getting your documentation in top shape:</p><ol><li>Broad, focused documentation reviews</li><li>Documentation that lives with the code</li><li>Easily accessible, standardized access</li></ol><p>Let’s take a look at each of these individually and how they can apply to your documentation review process. </p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://developerhub.io/blog/content/images/2020/10/blog-review-1.jpg" class="kg-image" alt="Establishing a Review Process"></figure><!--kg-card-end: image--><h2 id="broad-not-deep">Broad, Not Deep</h2><p>Your team members are often specialists in their respective fields, and they should be leveraged as such. Rather than dropping your work into their routine with a vague intention of “making the docs better,” ensure that each reviewer knows what their contribution should be. Let the QA reviewer focus on the known issues that may be absent from the document. Let the Marketing reviewer focus on ensuring the branding and voice of the writing align to the larger goals, and so forth. By having a broad pool of reviewers each with specific, specialized goals, you are able to get the best aspect of each team member while minimizing redundant reviews. Personally, my worst reviewing days have been when I receive six emails back from subject matter experts all pointing out a minor typo or JSON structure issue but no feedback on some of the truly difficult nuances of the feature or API. Everyone is pretty fatigued by the time the document comes back around, and even when the second pass is more intentional, the quality suffers. Likewise, each reviewer should be able to expect when the review will come their way. In my experience, I typically move from design to developer to marketing reviews to ensure accuracy as the focus and document develops. <strong>Figure out the singular but focused role each reviewer has and you’ll save time while improving your docs (and potentially watercooler chats too!).</strong></p><h2 id="two-way-documentation">Two-Way Documentation</h2><p>While standard help center articles typically only surface once the feature is complete, many API documents grow and live with the APIs in the codebase itself. Design or contract-first API methodologies are growing in popularity and continue to be useful in ensuring that critical partner or internal features are at the forefront. Design-first API methods focus on the contract (or human and machine-readable document) and only then build the supporting code, while code-first approaches focus on directly coding in the API from which the contract is later generated. Tracing the current trends, a <a href="https://static1.smartbear.co/smartbearbrand/media/pdf/smartbear_state_of_api_2019.pdf">2019 State of the API survey</a> found that “while 25% say they are only using a design-first approach, 22% say they are using both the design-first and code-first approach. One-third of the respondents that currently use code-first only say they are moving to a design-first approach.” As such, a key takeaway is that <strong>great documentation also adds value back to the design itself.</strong> </p><p>Personally, I have worked in typical sequential review flows where a raw JSON file is passed to me, I edit and publish it, team members sign off on the new version and the document is largely filed away never to be revisited. The improved documentation never makes its way back to the code comments and future developers and writers miss out on the fruits of the review process. In some cases, the discrepancy can grow between the internally-held and externally-published documents to where there are significant enough differences to impede the full utility of the API; for example, when an endpoint is being refactored, insights gleaned from prior iterations are left out. In companies with significant turnover or growth, new team members or developers may be referencing the same doc from different sources and creating confusion. Making sure that your reviewed, improved copy is the benchmark document allows your team’s hard work to reach its full potential. </p><h2 id="standardized-access">Standardized Access</h2><p>One of the most simple yet easily overlooked aspects of a good review process is the ease of access and drafting. Nothing torpedoes a review process more quickly than having half of it in shared docs, part of it in emails or chats, part on the live site, and so forth. <strong>Choose a specific method for drafting and reviewing and stick to it.</strong> This will not only save you many organizational headaches, but it will also prevent key edits being lost in the mix of multiple drafts and locations. Personally, I love the new addition of Reviewer roles in DeveloperHub for this very purpose. Developers and QAs can get involved in the same document and leverage different versions to keep the edits intact. Likewise, the finer parts of discussion can be handled with in-app comments before being instantly published. Edits can be reverted at any time to remove any pesky errors, so I can be sure that we can dive into the process without concerns of losing any key feedback. </p><p>When it comes to establishing your review process, an ounce of planning is worth a pound of cure. Let me know if any other steps have made your review cycles much better (or worse!) in the comments below. Happy reviewing!</p><!--kg-card-begin: hr--><hr><!--kg-card-end: hr--><p>Written by <a href="https://www.linkedin.com/in/codyholden/">Cody Holden</a> for <a href="https://developerhub.io/">DeveloperHub.io</a>.<br></p>]]></content:encoded></item><item><title><![CDATA[What's new in OpenAPI 3.0?]]></title><description><![CDATA[OAS 3 has simplified structure, new reusable features, extended support for schema object and more]]></description><link>https://developerhub.io/blog/openapi-3-0-take-your-docs-to-the-next-level/</link><guid isPermaLink="false">5f4ff682a44f3705356fdba6</guid><category><![CDATA[OpenAPI]]></category><category><![CDATA[Developer Hub]]></category><dc:creator><![CDATA[Zaid Daba'een]]></dc:creator><pubDate>Wed, 02 Sep 2020 20:49:46 GMT</pubDate><media:content url="https://developerhub.io/blog/content/images/2020/09/openapi3.png" medium="image"/><content:encoded><![CDATA[<img src="https://developerhub.io/blog/content/images/2020/09/openapi3.png" alt="What's new in OpenAPI 3.0?"><p>Long gone are days of technical writers merely annotating screenshots, writing FAQs, and serving as an afterthought to development. With the growth of RESTful APIs and microservices, documentation is more important than ever for both accelerating internal development, supporting technical sales and partner teams, and facilitating smooth external integrations. In fact, <a href="https://www.programmableweb.com/news/api-consumers-want-reliability-documentation-and-community/2013/01/07">a 2013 survey by Programmable Web</a> found that complete and accurate documentation was rated as the most important factor in evaluating an API—outranking service-level agreements, price, and even service uptime! Fortunately, as the value of technical documentation has continued to grow, so has the number of tools and services available to support documentation developers. One of the most significant advances in standardizing, improving and building API documentation has been the OpenAPI (Swagger) specification and tool sets.</p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://developerhub.io/blog/content/images/2020/09/openapi3-1.png" class="kg-image" alt="What's new in OpenAPI 3.0?"></figure><!--kg-card-end: image--><h2 id="what-is-openapi">What is OpenAPI?</h2><p><br>OpenAPI is a specification for describing and formatting REST APIs. Written in YAML or JSON, OpenAPI provides a method for documenting the endpoints, operations, required/optional parameters, code samples, and virtually anything you need to communicate about your API. These documents are easily readable by people and machines, can be quickly edited, and even generated directly from the code base. </p><p>Formerly known as Swagger before being renamed as the OpenAPI Specification (OAS) in 2016, OAS quickly became the dominant structure for describing REST APIs. By mid-2017, OAS tools exceeded 100,000 downloads per day and have continued to grow. The specification is currently in its third iteration, and the first major release since its move to the OpenAPI Initiative. So, if it has been so successful, what’s the big deal about the latest release? And, more importantly, how can the Swagger spec give your audience the confidence to move forward with your APIs?<br></p><h2 id="what-s-in-it-for-me">What’s in it for me?</h2><p>As exciting as these developments are to read about, the most important thing is always the tangible, measurable benefit they can bring to your team, documentation, and strategy. For writers learning about OAS 3.0 for their developer docs, the following aspects stand out in contrast to not only other tools but also previous versions of OAS.<br></p><h2 id="simplified-structure">Simplified Structure</h2><p>Regardless of how effective a tool <em>could</em> <em>be</em>, it’s not worth very much if it is impossible to learn, digest, and get up and running. With this in mind, OAS 3.0 features several adjustments to condense and simplify the structure for readability and ease-of-use. Let’s take a look at the YAML document for both OAS 2.0 and 3.0 to highlight some of these comparisons.<br></p><h3 id="hosts-urls-and-servers">Hosts, URLs and Servers</h3><p>Previously, version 2.0 allowed you to set a <strong>host</strong>, <strong>base URL</strong> and <strong>schemes</strong> to apply across your API documentation. With OAS 3.0, these fields are combined into a <strong>servers </strong>property, condensing the document while also providing support for multiple base URLs. These can then be defined later in the document to allow individual endpoints to have their own unique base URL if needed. This could be leveraged in the case of staging and production servers.<br></p><!--kg-card-begin: image--><figure class="kg-card kg-image-card"><img src="https://developerhub.io/blog/content/images/2020/09/image.png" class="kg-image" alt="What's new in OpenAPI 3.0?"></figure><!--kg-card-end: image--><h2 id="new-reusable-features">New Reusable Features</h2><p>As the “docs-as-code” methodology continues to grow, it’s more important than ever that the structure for documenting APIs mirrors the subject matter itself. OAS 3.0 includes several adjustments to the existing <strong>components </strong>object to achieve this, with a particular focus on the reusability and consistency of the full document. The five new component objects in OAS 3.0 are:</p><ul><li>callbacks</li><li>links</li><li>examples</li><li>requestBodies</li><li>headers</li></ul><p>Let’s take a more in-depth look at how two of these may function in your documentation.</p><h3 id="links">Links</h3><p>The<strong> links</strong> object provides a method to describe the relationships between paths. One valuable utility of this field could be directing the user to the next step or the purpose of a value return in the API response. For example, let’s say you have an API where the user enters in a GET request for data on a pet and receives an <strong>adoptID</strong> in the response. You could leverage the <strong>links</strong> object to describe how to use that <strong>adoptID</strong> to submit your adoption request in a subsequent POST.</p><!--kg-card-begin: code--><pre><code class="language-yaml">links:
  GetAdoptIdByPetId:   # &lt;---- arbitrary name for the link
  operationId: getPet
  # or
  # operationRef: '#/paths/~1users~1{adoptId}/get'
  parameters:
  adoptID: '$response.body#/id'

  description: &gt;
    The `adoptID` value returned in the response can be used as
    the `adoptID` parameter in `POST /petStore/{adoptID}`to place an adoption hold on the given pet.</code></pre><!--kg-card-end: code--><p></p><h3 id="callbacks">Callbacks</h3><p>In order to make APIs more dynamic and useful, webhooks and event-driven design are becoming more significant every day. By configuring the Callbacks object, the API documentation can detail additional out-of-band actions that may follow a given request. For example, if you have a client subscribing to your API for given events, they can see the URL where the callback returns data and the parameters of the request body they can expect. You can nest this object within a POST call as detailed in the OAS 3.0 example below:</p><!--kg-card-begin: code--><pre><code class="language-yaml">callbacks:
  # the name `onData` is a convenience locator
  onData:
    # when data is sent, it will be sent to the `callbackUrl` provided
    # when making the subscription PLUS the suffix `/data`
    '{$request.query.callbackUrl}/data':
      post:
        requestBody:
          description: subscription payload
          content:
            application/json:
              schema:
                type: object
                properties:
                  timestamp:
                    type: string
                    format: date-time
                  userData:
                    type: string</code></pre><!--kg-card-end: code--><p></p><h3 id="examples">Examples</h3><p>The inclusion of easy-to-digest examples is key to converting prospects to partners. With the new Example object, documentation can include rich-text syntax, internally embedded examples (including non-JSON/YAML media types), and URLs to reference external examples that may not have fit smoothly within the JSON/YAML document itself. Examples can be embedded in the model, parameter, request body and response level. If you can’t resist seeing examples of examples, check out how each of these methods is described in the object specification <a href="https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#example-object">here.</a></p><h2 id="extended-support-for-schema-object"><br>Extended Support for Schema Object</h2><p>OAS 3.0 expands on examples by supporting multiple media types driven from the schema. For example, for an operation that may contain a binary type for a ‘200’ response and a JSON type for a ‘400’ response, you can document both within the same schema and have this reflected in your document. </p><p>Likewise, schema definitions can be further filtered via <strong>allOf, anyOf, oneOf </strong>to improve API validation. These ensure that the chosen keywords successfully validate against every, at least one, or exactly one schema, respectively. Building on the pet store example above, let’s say the store has both cats and dogs and these objects have both shared and unique attributes. using these validating keywords can be used to ensure the response contains all the fields from both (allOf), all the fields from either (oneOf), or the fields from one or more (anyOf). </p><!--kg-card-begin: hr--><hr><!--kg-card-end: hr--><p>With all the new features and flexibility of OpenAPI 3.0, documentation developers can have even more impact on the design, development, and, ultimately, the success of their APIs.</p><p>For more information on all of the changes in OAS 3.0, check out the GitHub repository <a href="https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#server-object">here</a>.</p><p>Written by <a href="https://www.linkedin.com/in/codyholden/">Cody Holden</a> for <a href="https://developerhub.io/">DeveloperHub.io</a>.</p>]]></content:encoded></item></channel></rss>