先决条件

  1. Java 开发人员工具包 8(或更高版本)
  2. 已在开发计算机上安装 Maven
  3. 已在开发计算机上安装 Git
  4. Azure 订阅付费版或试用
  5. HTTP 测试应用程序,如 Postman

使用 Swagger.IO 创建 API 基架

使用 swagger.io 在线编辑器可以输入表示 API 结构的 Swagger JSON 或 YAML 代码。设计 API 外围应用后,可以针对各种不同的平台和框架导出代码。在下一部分,我们将修改基架代码,包含模拟功能。

本演示从粘贴到 swagger.io 编辑器中的 Swagger JSON 正文开始,接着使用该正文来生成利用 JAX-RS 访问 REST API 终结点的代码。然后,将编辑基架代码来返回模拟数据,以便模拟一个构建在数据持久性机制基础上的 REST API。

  1. 将以下 Swagger JSON 代码复制到剪贴板:

    {
    "swagger": "2.0",
    "info": {
    "version": "v1",
    "title": "Contact List",
    "description": "A Contact list API based on Swagger and built using Java"
    },
    "host": "localhost",
    "schemes": [
    "http",
    "https"
    ],
    "basePath": "/api",
    "paths": {
    "/contacts": {
    "get": {
    "tags": [
    "Contact"
    ],
    "operationId": "contacts_get",
    "consumes": [],
    "produces": [
    "application/json",
    "text/json"
    ],
    "responses": {
    "": {
    "description": "OK",
    "schema": {
    "type": "array",
    "items": {
    "$ref": "#/definitions/Contact"
    }
    }
    }
    },
    "deprecated": false
    }
    },
    "/contacts/{id}": {
    "get": {
    "tags": [
    "Contact"
    ],
    "operationId": "contacts_getById",
    "consumes": [],
    "produces": [
    "application/json",
    "text/json"
    ],
    "parameters": [
    {
    "name": "id",
    "in": "path",
    "required": true,
    "type": "integer",
    "format": "int32"
    }
    ],
    "responses": {
    "": {
    "description": "OK",
    "schema": {
    "type": "array",
    "items": {
    "$ref": "#/definitions/Contact"
    }
    }
    }
    },
    "deprecated": false
    }
    }
    },
    "definitions": {
    "Contact": {
    "type": "object",
    "properties": {
    "Id": {
    "format": "int32",
    "type": "integer"
    },
    "Name": {
    "type": "string"
    },
    "EmailAddress": {
    "type": "string"
    }
    }
    }
    }
    }
  2. 导航到在线 Swagger 编辑器。在该位置,单击“文件”->“粘贴 JSON”菜单项。
  3. 粘贴前面复制的联系人列表 API Swagger JSON。
  4. 查看编辑器中显示的文档页和 API 摘要。
  5. 择“生成服务器”->“JAX RS”菜单选项,创建服务器端代码的基架,稍后要编辑该代码来添加模拟实现。
  1. 生成代码后,系统会提供要下载的 ZIP 文件。此文件包含 Swagger 代码生成器创建了基架的代码,以及所有关联的生成脚本。将整个库解压缩到开发工作站上的某个目录。
  2. 编辑代码以添加 API 实现

在本部分,将 Swagger 所生成代码的服务器端实现替换为自定义代码。新代码将 Contact 实体的 ArrayList 返回给调用方客户端。

  1. 使用 Visual Studio Code 或偏好的文本编辑器,打开位于 src/gen/java/io/swagger/model 文件夹中的 Contact.java 模型文件。

  2. 将以下构造函数添加到 Contact 类。

    public Contact(Integer id, String name, String email)
    {
    this.id = id;
    this.name = name;
    this.emailAddress = email;
    }
  3. 使用 Visual Studio Code 或偏好的文本编辑器,打开位于 src/main/java/io/swagger/api/impl 文件夹中的 ContactsApiServiceImpl.java 服务实现文件。

  4. 使用新代码覆盖文件中的代码,将模拟实现添加到服务代码。

    package io.swagger.api.impl;
    
    import io.swagger.api.*;
    import io.swagger.model.*;
    import com.sun.jersey.multipart.FormDataParam;
    import io.swagger.model.Contact;
    import java.util.*;
    import io.swagger.api.NotFoundException;
    import java.io.InputStream;
    import com.sun.jersey.core.header.FormDataContentDisposition;
    import com.sun.jersey.multipart.FormDataParam;
    import javax.ws.rs.core.Response;
    import javax.ws.rs.core.SecurityContext; @javax.annotation.Generated(value = "class io.swagger.codegen.languages.JaxRSServerCodegen", date = "2015-11-24T21:54:11.648Z")
    public class ContactsApiServiceImpl extends ContactsApiService { private ArrayList<Contact> loadContacts()
    {
    ArrayList<Contact> list = new ArrayList<Contact>();
    list.add(new Contact(, "Barney Poland", "barney@contoso.com"));
    list.add(new Contact(, "Lacy Barrera", "lacy@contoso.com"));
    list.add(new Contact(, "Lora Riggs", "lora@contoso.com"));
    return list;
    } @Override
    public Response contactsGet(SecurityContext securityContext)
    throws NotFoundException {
    ArrayList<Contact> list = loadContacts();
    return Response.ok().entity(list).build();
    } @Override
    public Response contactsGetById(Integer id, SecurityContext securityContext)
    throws NotFoundException {
    ArrayList<Contact> list = loadContacts();
    Contact ret = null; for(int i=; i<list.size(); i++)
    {
    if(list.get(i).getId() == id)
    {
    ret = list.get(i);
    }
    }
    return Response.ok().entity(ret).build();
    }
    }
  5. 打开命令提示符,将目录切换到应用程序的根文件夹。
  6. 执行以下 Maven 命令生成代码,然后在本地使用 Jetty 应用服务器运行该代码。
    mvn package jetty:run
  7. 应会在命令窗口中看到 Jetty 已经在端口 8080 上启动代码。
  8. 使用 Postmanhttp://localhost:8080/api/contacts 中的“get all contacts”API 方法发出请求。
  9. Postmanhttp://localhost:8080/api/contacts/2 中的“get specific contact”API 方法发出请求。
  10. 最后,在控制台中执行以下 Maven 命令来生成 Java WAR(Web 存档)文件。
    mvn package war:war
  11. 生成的 WAR 文件将放入 target 文件夹。导航到 target 文件夹,然后将 WAR 文件重命名为 ROOT.war。(请确保大小写符合此格式)。
    rename swagger-jaxrs-server-1.0..war ROOT.war
  12. 最后,从应用程序的根文件夹执行以下命令创建 deploy 文件夹,用于将 WAR 文件部署到 Azure。
    mkdir deploy
    mkdir deploy\webapps
    copy target\ROOT.war deploy\webapps
    cd deploy

考虑到篇幅问题,有兴趣的朋友可以通过这个链接来查看后续步骤。

怎样在 Azure 应用服务中生成和部署 Java API 应用的更多相关文章

  1. Azure 应用服务中的 API 应用、ASP.NET 和 Swagger 入门

    学习内容: 如何通过 Visual Studio 2015 中的内置工具在 Azure 应用服务中创建和部署 API 应用. 如何使用 Swashbuckle NuGet 包动态生成 Swagger ...

  2. Azure应用服务+Github实现持续部署

    上次我们介绍了如何使用Azure应用服务(不用虚机不用Docker使用Azure应用服务部署ASP.NET Core程序).我们通过Visual studio新建一个项目后手动编译发布代码.然后通过F ...

  3. 【Azure 应用服务】NodeJS Express + MSAL 实现API应用Token认证(AAD OAuth2 idToken)的认证实验 -- passport.authenticate('oauth-bearer', {session: false})

    问题描述 在前两篇博文中,对NodeJS Express应用 使用MSAL + AAD实现用户登录并获取用户信息,获取Authorization信息 ( ID Token, Access Token) ...

  4. 【Azure 应用服务】PHP应用部署在App Service for Linux环境中,上传文件大于1MB时,遇见了413 Request Entity Too Large 错误的解决方法

    问题描述 在PHP项目部署在App Service后,上传文件如果大于1MB就会遇见 413 Request Entity Too Large 的问题. 问题解决 目前这个问题,首先需要分析应用所在的 ...

  5. 【Azure 应用服务】App Service For Linux 部署PHP Laravel 项目,如何修改首页路径为 wwwroot\public\index.php

    问题描述 参考官方文档部署 PHP Laravel 项目到App Service for Linux环境中,但是访问应用时候遇见了500 Server Error 错误. 从部署的日志中,可以明确看出 ...

  6. 【Azure 应用服务】App Service中,为Java应用配置自定义错误页面,禁用DELETE, PUT方法

    问题定义 使用Azure应用服务(App Service),部署Java应用,使用Tomcat容器,如何自定义错误页面呢?同时禁用DELETE, PUT方法 解决办法 如何自定义错误页面呢?需要在 J ...

  7. 【Azure 应用服务】一个 App Service 同时部署运行两个及多个 Java 应用程序(Jar包)

    问题描述 如何在一个AppService下同时部署运行多个Java 应用程序呢? 问题解答 因为App Service的默认根目录为 wwwroot.如果需要运行多个Java 应用程序,需要在 www ...

  8. 为 Azure 应用服务配置连续部署工作流

    本快速入门介绍了如何将应用服务 GitHub 集成以实现连续部署工作流.在本教程中完成的所有操作均符合1元试用条件. 本快速入门介绍了如何将应用服务 GitHub 集成以实现连续部署工作流.在本教程中 ...

  9. 【Azure 应用服务】App Service For Linux 部署Java Spring Boot应用后,查看日志文件时的疑惑

    编写Java Spring Boot应用,通过配置logging.path路径把日志输出在指定的文件夹中. 第一步:通过VS Code创建一个空的Spring Boot项目 第二步:在applicat ...

随机推荐

  1. set 集合数据类型

    set 数据类型 set 与列表类似,区别在于 set 不能包含重复的值. In [1]: a_list = ['a', 'b', 'c', 'b', 'd', 'm', 'n', 'n'] In [ ...

  2. luoguP4647 [IOI2007] sails 船帆

    https://www.luogu.org/problemnew/show/P4647 首先发现答案与顺序无关,令 $ x_i $ 表示高度为 $ i $ 的那一行帆的个数,第 $ i $ 行对答案的 ...

  3. memcache内存存储

    memcache的内存分配默认是采用了Slab Allocator的机制分配.管理内存.在该机制出现以前,内存的分配是通过对所有记录简单地进行malloc和free来进行的. 但是,这种方式会导致内存 ...

  4. Linux中tail指令详解

    linux tail命令用途是依照要求将指定的文件的最后部分输出到标准设备,通常是终端,通俗讲来,就是把某个档案文件的最后几行显示到终端上,假设该档案有更新,tail会自己主动刷新,确保你看到最新的档 ...

  5. STL项目-学校演讲比赛

    // 学校演讲比赛.cpp : 此文件包含 "main" 函数.程序执行将在此处开始并结束. // #include "pch.h" #include < ...

  6. 钩子编程(HOOK) 屏蔽全部按键、鼠标及系统功能键 (4)

    摘要:上篇文章<钩子编程(HOOK) 安装系统全局钩子>已经具体的解说了全局钩子的安装.本文将增强一下钩子的功能.实现屏蔽全部按键鼠标与系统功能键.要实现这个功能.须要安装两个全局钩子,& ...

  7. [转] Elasticsearch 6.1官方入门教程

    一篇比较简要又全面的elasticsearch教程. https://blog.csdn.net/hololens/article/details/78932628

  8. mysqladmin常用用法

    mysqladmin 工具的使用格式:mysqladmin [option] command [command option] command ...... 参数选项: -c number 自动运行次 ...

  9. C#静态和实例

    静态 实例 关键字static修饰类或方法 不能使用static修饰类或方法 修饰后类直接调用 需要先实例化对象,用对象调用 静态只会执行调用一次,并且在程序退出之前会一直保持状态,占领内存 实例化一 ...

  10. C# openfiledialog的使用

    文件对话框(FileDialog) 一.打开文件对话框(OpenFileDialog) 1. OpenFileDialog控件有以下基本属性 InitialDirectory 对话框的初始目录Filt ...