Heim >Web-Frontend >js-Tutorial >Einführung von Hono OpenAPI: Vereinfachung der API-Dokumentation für HonoJS

Einführung von Hono OpenAPI: Vereinfachung der API-Dokumentation für HonoJS

Susan Sarandon
Susan SarandonOriginal
2024-12-10 03:53:10393Durchsuche

Introducing Hono OpenAPI: Simplifying API Documentation for HonoJS

Das Wichtigste zuerst: Warum eine weitere OpenAPI-Bibliothek für Hono erstellen, wenn es bereits eine gibt?

Diese Frage haben sich viele gestellt. Ja, es gibt Zod OpenAPI, erstellt von Yusuke. Obwohl es sich um ein großartiges Paket handelt, weist es einige erhebliche Einschränkungen auf, die zur Schaffung einer neuen Lösung geführt haben.

Die Herausforderungen mit @hono/zod-openapi

Lassen Sie uns erklären, warum hono-openapi entwickelt wurde, indem wir die beiden Ansätze vergleichen.

1. Syntax- und Workflow-Unterschiede

Hier ist ein Beispiel mit @hono/zod-openapi:

// Using @hono/zod-openapi 
import { OpenAPIHono, createRoute, z } from '@hono/zod-openapi';

const ParamsSchema = z.object({
  id: z
    .string()
    .min(3)
    .openapi({
      param: {
        name: 'id',
        in: 'path',
      },
      example: '1212121',
    }),
});

const route = createRoute({
  method: 'get',
  path: '/users/{id}',
  request: {
    params: ParamsSchema,
  },
});

const app = new OpenAPIHono();

app.openapi(route, (c) => {
  const { id } = c.req.valid('param');
  return c.json({ id, age: 20, name: 'Ultra-man' });
});

// The OpenAPI documentation will be available at /doc
app.doc('/doc', {
  openapi: '3.0.0',
  info: {
    version: '1.0.0',
    title: 'My API',
  },
});

Vergleichen Sie dies nun mit derselben Anwendung, die mit hono-openapi geschrieben wurde:

// Using Hono-OpenAPI
import z from 'zod';
import { Hono } from 'hono';
import { describeRoute } from 'hono-openapi';
import { resolver, validator as zValidator } from 'hono-openapi/zod';

// Extending the Zod schema with OpenAPI properties
import 'zod-openapi/extend';

const paramSchema = z.object({
  id: z.string().min(3).openapi({ example: '1212121' }),
});

const app = new Hono();

app.get(
  '/',
  zValidator('param', paramSchema),
  (c) => {
    const param = c.req.valid('param');
    return c.text(`Hello ${param?.id}!`);
  }
);

app.get(
  '/openapi',
  openAPISpecs(app, {
    documentation: {
      info: {
        title: 'Hono',
        version: '1.0.0',
        description: 'API for greeting users',
      },
      servers: [
        { url: 'http://localhost:3000', description: 'Local server' },
      ],
    },
  })
);

Der Unterschied ist klar: mit hono-openapi können Sie direkt im Standard-HonoJS-Workflow arbeiten. Dadurch entfällt die steile Lernkurve und es wird sichergestellt, dass die Syntax mit der Dokumentation und den Konventionen von HonoJS übereinstimmt.

2. Herausforderungen beim Opt-In

Mit @hono/zod-openapi ist die Nachrüstung einer vorhandenen HonoJS-Anwendung zur Generierung von OpenAPI-Spezifikationen eine große Herausforderung. Das Umschreiben von Routen für eine große Anwendung kann zeitaufwändig und fehleranfällig sein. hono-openapi löst dieses Problem, indem es als Middleware fungiert, sodass Sie es ohne große Änderungen zu vorhandenen Apps hinzufügen können.

3. Eingeschränkte Validator-Unterstützung

Die Originalbibliothek unterstützt nur Zod. Obwohl Zod ausgezeichnet ist, verwenden viele Entwickler Alternativen wie Valibot, ArkType und TypeBox. hono-openapi ist validatorunabhängig und bietet erstklassige Unterstützung für mehrere Bibliotheken.


Warum OpenAPI-Spezifikationen wichtig sind

Einige fragen sich vielleicht: „Warum sollte man sich überhaupt mit OpenAPI-Spezifikationen beschäftigen?“ Meine App funktioniert auch ohne sie.“

Aus diesem Grund ist die Generierung von OpenAPI-Spezifikationen ein entscheidender Faktor:

  1. API-Client-Generierung: Verwenden Sie die Spezifikationen, um Clients für verschiedene Programmiersprachen automatisch zu generieren und so Entwicklungszeit zu sparen.
  2. Entwicklerzusammenarbeit: Halten Sie Ihr Team mit der aktuellen API-Dokumentation auf dem Laufenden und reduzieren Sie Missverständnisse und Fehler.
  3. Optimiertes Debugging: Eliminieren Sie Rätselraten, wenn APIs ausfallen, indem Sie eine klare, genaue Dokumentation für alle Endpunkte bereitstellen.
  4. Best Practices: Generieren Sie automatisch Dokumentation, die sich mit Ihrer Codebasis weiterentwickelt und so die Konsistenz über Zweige und Versionen hinweg gewährleistet.

Wenn Sie jemals in einem Team gearbeitet haben, in dem Frontend- und Backend-Entwickler API-Details manuell synchronisieren mussten, wissen Sie, wie schmerzhaft das sein kann. OpenAPI-Spezifikationen lösen dieses Problem, indem sie eine einzige Quelle der Wahrheit bereitstellen.


Warum sollten Sie sich für hono-openapi entscheiden?

Um diese Herausforderungen anzugehen und Best Practices zu fördern, wurde hono-openapi mit folgenden Zielen entwickelt:

  • Validator-Agnostic: Verwenden Sie Ihre bevorzugte Validierungsbibliothek – Zod, Typebox, ArkType, Valibot oder andere.
  • Nahtlose Integration: Fügen Sie es mit minimalen Änderungen als Middleware zu jedem HonoJS-Projekt hinzu.
  • Automatische OpenAPI-Generierung: Definieren Sie Schemata einmal und überlassen Sie den Rest der Bibliothek.
  • Typsicher: Gebaut mit TypeScript für zuverlässige und konsistente Typvalidierung.
  • Anpassbar: Passen Sie die generierten OpenAPI-Spezifikationen an die Anforderungen Ihres Projekts an.

Bereit zum Einstieg?

Wenn das nach der Lösung klingt, auf die Sie gewartet haben, schauen Sie sich die Bibliothek an und beteiligen Sie sich an der Unterhaltung:

  • GitHub-Repository: hono-openapi
  • Dokumentation: GitHub README | Hono-Beispiele

Ich hoffe, dieser Artikel überzeugt Sie, hono-openapi auszuprobieren und zu sehen, wie es das Erstellen und Dokumentieren von APIs vereinfacht. Ihr Feedback ist wichtig! Lassen Sie uns gemeinsam eine stärkere HonoJS-Community aufbauen.

Das obige ist der detaillierte Inhalt vonEinführung von Hono OpenAPI: Vereinfachung der API-Dokumentation für HonoJS. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn