Skip to content

Bits of .NET

Daily micro-tips for C#, SQL, performance, and scalable backend engineering.

  • Asp.Net Core
  • C#
  • SQL
  • JavaScript
  • CSS
  • About
  • ErcanOPAK.com
  • No Access
  • Privacy Policy
Ajax

AJAX: REST API Documentation with OpenAPI

- 15.08.26 - ErcanOPAK

📖 OpenAPI = API Documentation

Good APIs need good docs. OpenAPI provides standardized, interactive documentation for your REST APIs.

📝 OpenAPI Specification

# openapi.yaml
openapi: 3.0.0
info:
    title: My API
    version: 1.0.0
    description: API documentation

paths:
    /users:
        get:
            summary: Get all users
            description: Returns a list of users
            parameters:
                - name: page
                  in: query
                  schema:
                      type: integer
                      default: 1
                - name: limit
                  in: query
                  schema:
                      type: integer
                      default: 20
            responses:
                200:
                    description: Success
                    content:
                        application/json:
                            schema:
                                type: array
                                items:
                                    $ref: '#/components/schemas/User'

    /users/{id}:
        get:
            summary: Get user by ID
            parameters:
                - name: id
                  in: path
                  required: true
                  schema:
                      type: integer
            responses:
                200:
                    description: User found
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/User'
                404:
                    description: User not found

components:
    schemas:
        User:
            type: object
            properties:
                id:
                    type: integer
                name:
                    type: string
                email:
                    type: string
                created_at:
                    type: string
                    format: date-time

🎯 Tools and Integration

# Swagger UI
npm install swagger-ui-express

// Server Setup
const swaggerUi = require('swagger-ui-express');
const swaggerDocument = require('./openapi.json');

app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument));

# ReDoc
npm install redoc-express
const redoc = require('redoc-express');

app.get('/api-docs', redoc({
    title: 'API Documentation',
    specUrl: '/openapi.json'
}));

# Code Generation
openapi-generator generate -i openapi.yaml -g typescript-axios

# Validation
npm install swagger-cli
swagger-cli validate openapi.yaml

# Testing
npm install @openapi-contrib/openapi-schema-to-json-schema

# Security
npm install swagger-parser
swagger-parser validate openapi.yaml

💡 API Documentation Tips

  • Keep documentation up-to-date
  • Use examples in documentation
  • Include error responses
  • Add authentication details
  • Provide interactive testing

OpenAPI makes API documentation interactive and maintainable. It’s essential for modern API development.

— API Architect

Related posts:

AJAX: Use Retry Logic with Exponential Backoff for Failed Requests

Ajax: Use JSON.stringify to Send JavaScript Objects to Server

Ajax Responses Arrive Out of Order

Post Views: 3

Post navigation

JavaScript: Working with Promises and Async/Await
Git: Resolving Merge Conflicts Like a Pro

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

October 2026
M T W T F S S
 1234
567891011
12131415161718
19202122232425
262728293031  
« Sep    

Most Viewed Posts

  • Get the User Name and Domain Name from an Email Address in SQL (973)
  • How to make theater mode the default for Youtube (953)
  • How to add default value for Entity Framework migrations for DateTime and Bool (939)
  • Get the First and Last Word from a String or Sentence in SQL (847)
  • How to select distinct rows in a datatable in C# (837)
  • How to enable, disable and check if Service Broker is enabled on a database in SQL Server (624)
  • Add Constraint to SQL Table to ensure email contains @ (590)
  • Average of all values in a column that are not zero in SQL (553)
  • How to use Map Mode for Vertical Scroll Mode in Visual Studio (526)
  • Find numbers with more than two decimal places in SQL (468)

Recent Posts

  • CSS: Fix a prefers-color-scheme Media Query That Gets Silently Overridden by a Browser Extension’s Forced Dark Mode
  • Git: Fix a Merge Commit That Silently Drops a File Because Both Branches Deleted It Differently
  • HTML5: Fix a Native Lazy-Loading Image That Never Loads Because It Sits Inside a Hidden Tab Until the User Clicks It
  • The AI Prompt That Traces a Null Reference Exception Back to the Exact Line That First Produced the Null
  • The AI Prompt That Turns a Gym Membership Contract’s Fine Print Into a Plain-English List of Cancellation Steps
  • Photoshop: Fix a Color Profile Mismatch That Makes Printed Output Look Nothing Like What You Saw On Screen
  • WordPress: Fix Search Results That Return Pages From a Theme You Deactivated Months Ago
  • Visual Studio: Fix a Test Project That Builds Fine Alone but Fails to Discover Any Tests After a NuGet Restore
  • ASP.NET Core: Fix a File Upload That Times Out on Slow Connections Only Because Kestrel’s Minimum Data Rate Feature Kicked In
  • JavaScript: Fix an Array Destructuring Default Value That Silently Never Applies Because null Was Passed Instead of Undefined

Most Viewed Posts

  • Get the User Name and Domain Name from an Email Address in SQL (973)
  • How to make theater mode the default for Youtube (953)
  • How to add default value for Entity Framework migrations for DateTime and Bool (939)
  • Get the First and Last Word from a String or Sentence in SQL (847)
  • How to select distinct rows in a datatable in C# (837)

Recent Posts

  • CSS: Fix a prefers-color-scheme Media Query That Gets Silently Overridden by a Browser Extension’s Forced Dark Mode
  • Git: Fix a Merge Commit That Silently Drops a File Because Both Branches Deleted It Differently
  • HTML5: Fix a Native Lazy-Loading Image That Never Loads Because It Sits Inside a Hidden Tab Until the User Clicks It
  • The AI Prompt That Traces a Null Reference Exception Back to the Exact Line That First Produced the Null
  • The AI Prompt That Turns a Gym Membership Contract’s Fine Print Into a Plain-English List of Cancellation Steps

Social

  • ErcanOPAK.com
  • GoodReads
  • LetterBoxD
  • Linkedin
  • The Blog
  • Twitter
© 2026 Bits of .NET | Built with Xblog Plus free WordPress theme by wpthemespace.com