api-middleware

Ein Sumor Cloud Tool.
Mehr Dokumentation

API Middleware ist eine Middleware für Node.JS. Es kann Funktionen leicht für eine API freigeben und Parameter validieren

NPM Version NPM Downloads GitHub CI GitHub Test GitHub Coverage GitHub Audit

Installation

npm i @sumor/api-middleware --save

Voraussetzungen

Node.JS Version

Erfordert Node.JS Version 18.x oder höher

Erforderliches Node.JS ES-Modul

Da dieses Paket als ES-Modul geschrieben ist, ändere bitte folgenden Code in deiner package.json-Datei:

{
  "type": "module"
}

Verwendung

Grundverwendung

  1. Füge eine Datei mit dem Namen plus.js in deinem Projektordner api hinzu
export default async (context, req, res) => {
  const { data } = context
  const { a, b } = data
  return a + b
}
  1. [Optional] Füge eine Konfigurationsdatei mit dem Namen plus.json in deinem Projektordner api hinzu
{
  "name": "plus",
  "parameters": {
    "a": {
      "name": "Parameter a",
      "type": "number",
      "length": 3
    },
    "b": {
      "name": "Parameter b",
      "type": "number"
    }
  }
}
  1. Füge den folgenden Code in deiner index.js-Datei hinzu
import express from 'express'
import apiMiddleware from '@sumor/api-middleware'

const app = express()

await apiMiddleware(app, process.cwd() + '/api')

app.listen(3000, () => {
  console.log('Server läuft unter http://localhost:3000')
})
  1. Führe index.js aus
node index.js
  1. Teste die API
curl -X POST http://localhost:3000/plus -H "Content-Type: application/json" -d '{"a": 1, "b": 2}'

oder öffne mit einem Browser http://localhost:3000/plus?a=1&b=2

Optionen für apiMiddleware

import express from 'express'
import apiMiddleware from '@sumor/api-middleware'

const app = express()

await apiMiddleware(app, process.cwd() + '/api', {
  prefix: '/api',
  prepare: async context => {
    // Vor der API etwas tun
  },
  finalize: async (context, result) => {
    // Nach der API etwas tun
  },
  exception: async (context, error) => {
    // Fehler behandeln
  }
})
app.listen(3000, () => {
  console.log('Server läuft unter http://localhost:3000')
})

Weitere Konfigurationsdateitypen

yaml

Du kannst eine yaml-Datei verwenden, um die Konfigurationsdatei zu definieren, ersetze plus.json durch plus.yml

Der Typ unterstützt nur number, string, boolean, array, object

name: plus
parameters:
  a:
    name: Parameter a
    type: number
    length: 3
  b:
    name: Parameter b
    type: number
config.js

Um JS-Funktionen in der Konfigurationsdatei zu unterstützen, kannst du config.js-Datei verwenden, ersetze plus.json durch plus.config.js

export default {
  name: 'plus',
  parameters: {
    a: {
      name: 'Parameter a',
      type: 'number',
      length: 3
    },
    b: {
      name: 'Parameter b',
      type: 'number',
      rule: [
        {
          code: 'TOO_BIG',
          message: 'b sollte kleiner als 100 sein',
          function: function (value) {
            return value < 100
          }
        }
      ]
    }
  }
}

Parameterregel

Du kannst das folgende Beispiel zur Anwendung von Regeln auf Parameter verwenden

{
  "name": "plus",
  "parameters": {
    "a": {
      "name": "Parameter a",
      "type": "number",
      "length": 3,
      "rule": [
        {
          "code": "GREATER_THAN_0",
          "expression": "^[1-9][0-9]*$",
          "message": "muss größer als 0 sein"
        }
      ],
      "i18n": {
        "zh": {
          "GREATER_THAN_0": "muss größer als 0 sein"
        }
      }
    },
    "b": {
      "name": "Parameter b",
      "type": "number"
    }
  }
}

Für weitere Verwendungen, bitte sieh Validator nach

Kontext

data

Es enthält alle Parameter, die im Request übergeben wurden

Dateiuploads werden als folgendes Objekt analysiert:

exposeApis

Es enthält alle freigegebenen APIs