light4j介绍:light4j一个轻量级的低延时、高吞吐量、内存占用量小的API平台

light4j也有类似的在线生成的功能。下面笔者就带大家来一起了解一下。

 

 

 

在线生成light4j项目

light4j也有类似的在线生成功能,他的项目名称叫CodeGen,在线网址:https://codegen.lightapi.net/

模样如下:

 

 功能菜单说:

1)Release

目前这里有1.6.x和2.0.x两个选项

Release是light4j的版本分支,目前只要是1.6.x和2.0.x版本,1.6.x目前使用JDK1.8开发,2.0.x是面向JDK11用户。

国内用户大多数用JDK1.8,此处选择1.6.x,如果你们公司的JDK版本比较新,而且想体验JDK11编程特性,当然也就选择2.0.x

2)Framework

和项目作者联系以后,得知该是一些API风格的框架,主要用于描述web接口的风格:目前有

OpenAPI
OpenAPI Kotlin
Swagger
GraqphQL
Hybrid

Swagger大家或多或少听说过,通过在类和方法注解方式导出API,方便测试。

如下图

 

 笔者使用了OpenAPI,在网上找到一些一些文字:

What Is OpenAPI?

OpenAPI Specification (formerly Swagger Specification) is an API description format for REST APIs. An OpenAPI file allows you to describe your entire API,

including:

  • Available endpoints (/users) and operations on each endpoint (GET /usersPOST /users)
  • Operation parameters Input and output for each operation
  • Authentication methods
  • Contact information, license, terms of use and other information.

API specifications can be written in YAML or JSON. The format is easy to learn and readable to both humans and machines. The complete OpenAPI Specification

can be found on GitHub: OpenAPI 3.0 Specification

大意如下:

OpenAPI Sepcification(即以前的Swagger规范)是REST API的API描述格式。你可以在OpenAPI文件
中描述你的实体API,以及每个终端(/users)的操作(GET /users POST /users)的输入输出参数、身
份证验证方法、联系信息、许可、使用条款及其他信息。

API规范的可用YAML或者JSON来编写,学习成本较低,网站的OpenAPI规范可以在Github上获得。

(由于笔者没使用Swagger,各位看官可以根据自身情况决定是否去深入了解 框架。)

实践

笔者按照官方Steve Hu的codegen web视频教程将codeGen(点击此处可浏览youtube视频)的使用方法和大家分享一下。

 

 

 

 

 

 如上图所示笔者选择1.6.x版本分支,因为本地使用JDK8开发,接口描述风格选择OpenAPI,

菜单功能说明

     Model Option

     填入暴露的接口API描述文件,如果是在线文件选择(Online URL),如果是本地编辑好的文本,选择复制粘贴(Copy/Paste)

 

    Config Option

    这个则是light4j独有的配置文件,类似于springboot的yaml/yml,properties一样的全局设置文件。

     

对应的测试用例地址可以从以下项目中获得,且看下图

以下以java经典的demo宠物商店(petstore)为例,相关配置在https://github.com/networknt/model-config/tree/master/rest获得

笔者选择openapi的framework,所以从openapi目录中寻找相关配置文件。

model option地址:https://raw.githubusercontent.com/networknt/model-config/master/rest/openapi/petstore/1.0.0/openapi.yaml

openapi: 3.0.0
info:
  version: 1.0.0
  title: Swagger Petstore
  license:
    name: MIT
servers:
  - url: 'http://petstore.swagger.io/v1'
paths:
  /pets:
    get:
      summary: List all pets
      operationId: listPets
      tags:
        - pets
      parameters:
        - name: limit
          in: query
          description: How many items to return at one time (max 100)
          required: false
          schema:
            type: integer
            format: int32
      security:
        - petstore_auth:
            - 'read:pets'
      responses:
        '200':
          description: An paged array of pets
          headers:
            x-next:
              description: A link to the next page of responses
              schema:
                type: string
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Pet'
              example:
                - id: 1
                  name: catten
                  tag: cat
                - id: 2
                  name: doggy
                  tag: dog
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
    post:
      summary: Create a pet
      operationId: createPets
      requestBody:
        description: Pet to add to the store
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Pet'
      tags:
        - pets
      security:
        - petstore_auth:
            - 'read:pets'
            - 'write:pets'
      responses:
        '201':
          description: Null response
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  '/pets/{petId}':
    get:
      summary: Info for a specific pet
      operationId: showPetById
      tags:
        - pets
      parameters:
        - name: petId
          in: path
          required: true
          description: The id of the pet to retrieve
          schema:
            type: string
      security:
        - petstore_auth:
            - 'read:pets'
      responses:
        '200':
          description: Expected response to a valid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Pet'
              example:
                id: 1
                name: Jessica Right
                tag: pet
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
    delete:
      summary: Delete a specific pet
      operationId: deletePetById
      tags:
        - pets
      parameters:
        - name: petId
          in: path
          required: true
          description: The id of the pet to delete
          schema:
            type: string
        - name: key
          in: header
          required: true
          description: The key header
          schema:
            type: string
      security:
        - petstore_auth:
            - 'write:pets'
      responses:
        '200':
          description: Expected response to a valid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Pet'
              examples:
                response:
                  value:
                    id: 1
                    name: Jessica Right
                    tag: pet
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  securitySchemes:
    petstore_auth:
      type: oauth2
      description: This API uses OAuth 2 with the client credential grant flow.
      flows:
        clientCredentials:
          tokenUrl: 'https://localhost:6882/token'
          scopes:
            'write:pets': modify pets in your account
            'read:pets': read your pets
  schemas:
    Pet:
      type: object
      required:
        - id
        - name
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        tag:
          type: string
    Error:
      type: object
      required:
        - code
        - message
      properties:
        code:
          type: integer
          format: int32
        message:
          type: string

Model URL地址:https://raw.githubusercontent.com/networknt/model-config/master/rest/openapi/petstore/1.0.0/config.json

{
  "name": "petstore",
  "version": "3.0.1",
  "groupId": "com.networknt",
  "artifactId": "petstore",
  "rootPackage": "com.networknt.petstore",
  "handlerPackage":"com.networknt.petstore.handler",
  "modelPackage":"com.networknt.petstore.model",
  "overwriteHandler": true,
  "overwriteHandlerTest": true,
  "overwriteModel": true,
  "httpPort": 8080,
  "enableHttp": false,
  "httpsPort": 8443,
  "enableHttps": true,
  "enableHttp2": true,
  "enableRegistry": false,
  "supportDb": false,
  "supportH2ForTest": false,
  "supportClient": false,
  "dockerOrganization": "networknt"
}

经过以上设置然后点击生成(Generate)获得一个压缩包文件,本地打开如下

 

 

 以上就是正式项目了,不过是一个用户案例(demo程序)。

打来自述文件README.MD

 

 

 以上mvn命令是启动项目的

mvn clean install exec:exec

在终端(Terminal)中运行以上命令,大概可以看到以下运行结果

 

 

默认开启https服务,8443端口

我们再来回头看看哪个暴露api的描述文件。

 本地找到handler.yml文

 

 

 打开api接口申明的uri地址/specui.html

本地网址 https://localhost:8443/specui.html

 

至此大家应该明白了吧。这里暴露了一些rest风格的api接口地址。

我们还通过配置文件handler.yml找到了一些系统监控状况及诊断信息地址

服务器运行状态:

https://localhost:8443/server/info

 

 

服务器监控状况地址:https://localhost:8443/health/com.networknt.petstore-3.0.1

 

 

 

 

 

 通过以上可以看出,这个框架笔者投入了很多心血和技术,满满的佩服。

 

程序在IDEA下面调试方式启动,

 

 

 占用内存149.953125MB,通过工具我们可以看出,他的启动类是com.networknt.server.Server 通过解析配置文件来启动项目

 

posted on 2020-01-09 16:50  你不知道的浪漫  阅读(3483)  评论(1编辑  收藏  举报