云服务器内容精选

  • 步骤三:页面设计 前端应用由一个或多个组件拼装而成。在左侧插件栏打开物料资产包,选择合适的组件,拖拽到中间画布中。在画布选中组件,设置组件的属性、样式以及绑定事件。 本示例中,使用到组件有Box、Text、Img、输入框和按钮。 在左侧插件栏打开物料资产包,选择Box组件,拖拽到中间画布中。 选中组件,在右侧属性设置面板选择“样式”,设置组件属性样式,例如,尺寸,高700px。布局选择“flex-弹性布局”。 从物料资产包中分别拖拽两Box组件至1容器内,并设置宽度为50%。 图4 页面规划 将一个Img组件拖拽至左侧容器内,在右侧属性设置面板选择“样式”,设置尺寸宽高为100%,在右侧属性设置面板选择“属性”,src设置为前提条件中获取的路径。 图5 设置图片样式 图6 图片设置路径 将一个Box组件拖拽至右侧容器内,在右侧属性设置面板选择“样式”,设置组件样式,例如,宽高为250px,250px。 选择右侧容器,并在右侧属性设置面板选择“样式”,布局选择“flex-弹性布局”,主轴/辅轴对齐设置为“水平居中”。 图7 布局效果 将一个Box组件拖拽至6的容器内,在右侧属性设置面板选择“样式”,高度设置为30px,布局选择“flex-弹性布局”,主轴对齐设置为“水平居中”。 将一个Img组件和一个Text组件分别拖拽至7的容器内,并分别设置组件样式及属性。 Img组件:在右侧属性设置面板选择“样式”,设置尺寸高为100%,在右侧属性设置面板选择“属性”,src设置为前提条件中获取的路径。 Text组件:在右侧属性设置面板选择“样式”,字体大小调整至22px,字重700;在右侧属性设置面板选择“属性”,文本输入“企业用户登录”。 图8 添加登录标题 再依次将两个Text、两个输入框、一个按钮组件分别拖拽至6的容器内,外间距上下分别设置为10px,调整整体页面布局。整体效果如图9所示。 Text组件1:在右侧属性设置面板选择“样式”,字体大小调整至11px,在右侧属性设置面板选择“属性”,文本输入“使用Astro,轻巧便捷的与您的业务一起发展、壮大”。 输入框组件1:在右侧属性设置面板选择“样式”,设置尺寸宽为100%,高度为30px;在右侧属性设置面板选择“属性”,文本输入“请输入邮箱或手机号”。 输入框组件2:在右侧属性设置面板选择“样式”,设置尺寸宽为100%,高度为30px;在右侧属性设置面板选择“属性”,文本输入“请输入密码”。 按钮组件:在右侧属性设置面板选择“样式”,设置尺寸宽为100%,高度为30px,字体颜色为白色,背景颜色为蓝色;在右侧属性设置面板选择“属性”,文本输入“登录”。 Text组件2:在右侧属性设置面板选择“样式”,设置字体颜色为蓝色,字号10px;在右侧属性设置面板选择“属性”,文本输入“设置/忘记密码”。 图9 整体页面效果 单击顶部工具栏的,保存页面设计。
  • 步骤三:编辑服务 服务创建后,请根据自身业务的需求,设置服务的基本信息、框架配置、生成策略、业务设计和服务依赖,完成业务建模。 在服务列表中,单击步骤二:新建一个服务中已创建服务后的“编辑”。 图7 编辑服务 本示例中,基本配置、框架配置和生成策略均保持默认,直接单击“下一步”。 基本配置:用于配置服务的基本信息,直接在界面进行勾选配置,不同的配置会呈现不同的效果。 图8 基本配置 框架配置:配置服务使用的中间件或云服务,直接在界面进行勾选配置,不同的配置会呈现不同的效果。 图9 框架配置 生成策略:配置服务的代码风格,直接在界面进行勾选配置,不同的配置会呈现不同的效果。 图10 生成策略 业务设计。 业务设计是AstroPro提供的核心能力,是用户设计业务的基础。业务设计过程中,使用到的对象及对象间关系介绍,请参见对象详解。 本示例中,订单系统中包括用户(User)、订单(Order)和订单详情(OrderDetail)三个业务对象,且三个对象之间存在聚合关系,即用户存在时,订单才会存在,订单存在时,订单详情才会存在。同时一个用户可以关联多个订单,订单通过单号进行标识,一个订单又可以关联多个商品,商品可以记录数量。 在business中,拖拽BO对象到设计区,并修改对象名称为User。 图11 新建User对象 在BO属性操作中,单击“编辑字段”,新增name(用户名)字段,用于记录用户信息。 图12 新增name字段 按照上述操作,在business中,分别拖拽两个BO对象到设计区,并修改对象名称为“Order”和“OrderDetail”。 图13 新增对象Order和OrderDetail 为“Order”对象添加“orderNo(订单编号)”字段,为“OrderDetail”对象添加“product(商品)”、“amount(数量,integer类型)”字段。 其中,“orderNo”用于记录订单的编号,“product”用于记录商品的详情,“amount”用于记录商品的数量。 图14 为Order对象添加orderNo字段 图15 为OrderDetail添加product和amount字段 建立业务场景关系,即为User和Order,Order和OrderDetai建立聚合关系。 在订单系统中,要求用户存在时,订单才会存在,订单存在时,订单详情才会存在,故需要为对象建立聚合关系。 聚合关系中,次要方必须依赖首要方,任何对次要方的操作先要经过首要方才能继续往下操作。关于对象间关系的详细介绍,请参见对象间关系。 图16 建立业务场景关系 设计完成后,单击“下一步”。 (可选)为服务添加依赖,本示例不涉及,恭喜您已完成服务业务模型的配置。 通常情况下,一个应用不是一个单独的服务,可能由多个服务共同组成。这些服务之间可能存在一些跨服务的调用,此时就需要通过添加依赖服务,把这些服务的客户端集成过来。如何添加服务依赖,请参见添加依赖服务。
  • 业务场景及设计流程说明 在AstroPro中,用户通过业务建模,可生成高可用、高可靠、以及安全稳定的企业级IT应用框架。本入门通过创建一个简单的订单系统,帮助您快速上手AstroPro。 本入门为创建一个简单的订单系统,订单系统中包括用户(User)、订单(Order)和订单详情(OrderDetail)三个业务对象,且三个对象之间存在聚合关系,即用户存在时,订单才会存在,订单存在时,订单详情才会存在。同时一个用户可以关联多个订单,订单通过单号进行标识,一个订单又可以关联多个商品,例如手机、耳机等,商品可以记录数量。在AstroPro中,构建上述一个订单系统的流程,如图图1所示。 图1 开发订单系统流程图 步骤一:添加一个项目 项目是使用AstroPro核心业务的入口。在AstroPro中会为每个租户提供一个工作空间,您可以在工作空间中新建项目。 步骤二:新建一个服务 在AstroPro中,快速添加一个服务,新增服务中的配置均采用默认配置。此处创建的服务相当于为服务搭建了一个框架,如果需要实现某些特定的功能,还需要您根据自身业务需求进行业务建模。 步骤三:编辑服务 在已创建的服务中,根据自身业务需求,设置服务的基本信息、框架配置、生成策略、业务设计和服务依赖。 步骤四:生成服务代码 基于配置的业务模型生成服务的基本代码。代码生成后,会提供一个压缩包,供您直接使用。
  • 注册华为账号 并实名认证 如果您已有一个华为账号,请跳到下一个任务。如果您还没有华为账号,请参考以下步骤创建。 进入华为云官网,单击页面右上角的“注册”。 参考注册华为账号并开通华为云中操作,完成注册。 注册后参考个人账号如何完成实名认证或企业账号如何完成实名认证中操作,完成个人或企业账号实名认证。 执行本入门中操作,只需购买一个AstroPro基础版实例。基础版实例当前为免费试用,所以不需要为您的账户充值。
  • 购买扩容包 扩容包仅适用于在购买专业版或企业版的基础上使用,不可单独购买和退订。扩容包的使用截止时间与主资源的截止时间保持一致。 参考购买实例中操作,购买AstroPro企业版实例。 在已购买的实例中,单击“操作”,选择“扩容”。 图4 选择扩容 在购买扩容包页面,设置购买数量,单击“立即购买”。 一个资源扩容包,包含用户数50个、应用数20个、实体个数200个,请按需设置购买数量。 图5 购买扩容包 选择支付方式,单击“确认付款”,完成订单支付。
  • 购买实例 进入购买Astro企业应用实例页面。 “实例规格”选择“企业版”,其他参数按需进行设置,单击“立即购买”。 图1 选择购买规格 确认订单无误后,单击“去支付”。 以购买企业版一年为例,若为基础版,此处配置费用为“0”。 图2 确认订单 选择支付方式,单击“确认付款”,完成支付。 订单支付成功后,单击“返回Astro企业应用控制台”。 在Astro企业应用控制台中,可以查看到Astro企业应用的实例状态。当“实例状态”变为“运行中”时,说明实例已安装完成,可以正常使用Astro企业应用。 图3 查看实例状态
  • 17、x-entity-package 作用: 用于在swagger中指定实体类dto生成的包名。 标签值类型: String 使用位置: x-entity-package(定义在swagger的最外层) 使用示例: swagger: "2.0" info: description: "" version: "v1" title: "testSwagger" termsOfService: "http://www.coarl.org/service.html" host: "git.huawei.com" basePath: "/testswagger" x-entity-package: "customdto" ------------ 使用效果: 使用前: #dto对象生成目录 xxx.xx.xx.dto 使用后: #dto对象生成目录 xxx.xx.xx.customdto
  • 21、x-pom-gav 作用 自定义标签-pom坐标引入。 标签值类型 List 使用位置 x-pom-gav components.schemas.model.x-pom-gav components.schemas.model.properties.property.x-pom-gav paths.path.operation.x-pom-gav paths.path.operation.parameters.name.x-pom-gav x-pom-gav在Swagger文件中的位置可以是类级别、方法级别、参数级别,groupId、artifactId、version按照顺序用:连接,全局有一个地方定义即可,不需要重复定义。 使用示例 swagger: "2.0" info: description: "" version: "v1" title: "testSwagger" termsOfService: "http://www.coarl.org/service.html" host: "git.huawei.com" basePath: "/testswagger" x-entity-package: "customdto" x-interface-name-style: SERVICE_IMPL_AND_NO_I_INTERFACE_PREFIX x-user-defined-consumes: true x-pom-gav: # 手动引入hibernate-validator:依赖 - "org.hibernate.validator:hibernate-validator:8.0.1.Final" ------- 使用效果: 使用前: pom中没有org.hibernate.validator:hibernate-validator:8.0.1.Final的依赖 使用后: pom中生成org.hibernate.validator:hibernate-validator:8.0.1.Final的依赖
  • 18、x-interface-name-style 作用: 控制自定义接口、实现类命名风格。 标签值类型: enum(DEFAULT,SERVICE_IMPL_AND_NO_I_INTERFACE_PREFIX),配置为DEFAULT时和不配置此参数效果相同。 使用位置: x-interface-name-style 使用示例: swagger: "2.0" info: description: "" version: "v1" title: "testSwagger" termsOfService: "http://www.coarl.org/service.html" host: "git.huawei.com" basePath: "/testswagger" x-entity-package: "customdto" x-interface-name-style: SERVICE_IMPL_AND_NO_I_INTERFACE_PREFIX ------------ 使用效果: 使用前: service类的命名为 I+tag驼峰+ service eg: IOrderService 使用后: service类的命名为 tag驼峰+ service eg: OrderService
  • 5、x-class-annotations 作用: 添加指定的注解。 该标签用于在api接口或者dto类上添加指定的注解。 标签值类型: List 使用位置: x-class-annotations(定义在swagger的最外层时,会在所有的api接口上都添加指定的注解) components.schemas.model.x-class-annotations(定义dto对象上时,只在该对象上添加指定的注解) 使用示例: swagger: "2.0" info: description: "" version: "v1" title: "testSwagger" termsOfService: "http://www.coarl.org/service.html" host: "git.huawei.com" basePath: "/testswagger" x-imports: - "org.springframework.stereotype.Controller;" # 使用的时候结尾一定要带上 ; - "org.springframework.transaction.annotation.Transactional;" x-class-annotations: #此处添加的注解,在所有生成的api上都会添加 - "@Controller" # 此处会将 @Controller识别为一个字符串添加到api接口类上,并不会导入相应的包,需要使用 x-imports标签手动导入相应的包 - "@Transactional" # 此处会将 @Transactional识别为一个字符串添加到api接口类上,并不会导入相应的包,需要使用 x-imports标签手动导入相应的包 使用效果: 使用前: package com.huaweicloud.icsl.api; import ------ /** * CARDApi interface */ public interface CARDApi { ----------- } 使用后: package com.huaweicloud.icsl.api; import org.springframework.stereotype.Controller; // 通过x-imports 引入的导包 import org.springframework.transaction.annotation.Transactional; // 通过x-imports 引入的导包 /** * CARDApi interface */ @Controller // 通过x-class-annotations 引入的注解 @Transactional // 通过x-class-annotations 引入的注解 public interface CARDApi { ----------- }
  • 9、x-type 作用: 给dto的字段设置指定的类型。 标签值类型: String 使用位置: components.schemas.model.prorperties.field.x-type(设置在dto的指定字段上时,改变该字段的类型为指定类型) 使用示例: definitions: Contain: type: "object" x-generic: T x-extends: Parent properties: name: type: "string" description: "" example: data: type: "string" x-type: T # 通过x-type指定data的类型为T, 此处是将T当为一个字符串设置上,如果设置为一个对象时,需要使用x-imports手动导入相应的包 xml: name: "Contain" namespace: "com.huaweicloud.icsl.app.dto" --------------- 使用效果: 使用前: public class Contain implements Serializable { private static final long serialVersionUID = 1L; @JsonProperty("name") private String name = null; @JsonProperty("data") private String data = null; } 使用后: public class Contain implements Serializable { private static final long serialVersionUID = 1L; @JsonProperty("name") private String name = null; @JsonProperty("data") private T data = null; }
  • 16、x-enum-class-name 作用 用于标识查询参数对应的枚举类。 标签值类型 String 使用位置 paths.path.operation.parameters.fields.x-enum-value-type 对应的是swagger中已定义的枚举对象名字。 使用示例 Paths: /v1/orders/{order_id}/order-details: get: tags: - "Order" summary: "查询OrderDetail" description: "Returns OrderDetail" operationId: "ListOrderDetails" x-is-registered: 'N' x-support-sdk: 'N' x-mybatis-paging: true consumes: - "application/json" produces: - "application/json" parameters: - name: "status" in: "query" description: "status" required: false type: "string" x-enum-class-name: "OrderStatus" #此标签只在查询参数中使用 -------- 使用效果: 使用前: public class ListOrderDetailsQo implements Serializable { private static final long serialVersionUID = 1L; @JsonProperty("status") private Object status = null; ------------------- } 使用后: public class ListOrderDetailsQo implements Serializable { private static final long serialVersionUID = 1L; @JsonProperty("status") private OrderStatus status = null; ------------------- }
  • 4、x-annotations 作用: 添加指定的注解。 该标签用于在api的参数或者dto指定属性上添加注解。 标签值类型: List 使用位置: paths.path.operation.parameters.x-annotations(定义在api中的参数上时,只在此参数上生成对应的注解) definitions.model.properties.property.x-annotations(定义在dto的字段上时,只在此字段上生成对应的注解) 使用示例: Card: type: "object" properties: id: type: "string" description: "id" example: "id" balance: type: "integer" format: "int64" description: "balance" example: 123 address: type: "string" description: "address" example: "address" x-annotations: - "@InjectMocks" # 此处在address属性上添加了一个 @InjectMocks 注解 x-imports: - "org.mockito.InjectMocks;" # x-annotations实际是把 @InjectMocks当做字符串添加到了address上,所以需要自己通过x-imports导入相应的类 creator: type: "string" description: "creator" example: "creator" create_time: type: "string" format: "date-time" default: "CURRENT_TIMESTAMP" description: "create time" example: "2020-02-27 15:00:08" modify_time: type: "string" format: "date-time" default: "CURRENT_TIMESTAMP" description: "modified time" example: "2020-02-27 15:00:08" description: type: "string" description: "description info" example: "description" xml: name: "card" namespace: "com.huaweicloud.icsl.model" 使用效果: 使用前: public class Card implements Serializable { private static final long serialVersionUID = 1L; ----- @JsonProperty("address") private String address = null; ---- } 使用后: public class Card implements Serializable { private static final long serialVersionUID = 1L; ------- @JsonProperty("address") @InjectMocks // 通过 x-annotations 引入的注解 private String address = null; -------- }
  • 2、x-default-empty 作用: 只支持get请求,指定String类型参数生成默认值为""。 需要配合metadata元数据中generatorPolicy的queryParamLimit使用,当将请求参数转换为对象后此标签才会生效。 标签值类型: boolean 使用位置: paths.path.operation.parameters.name.x-default-empty 当该标签置为true时,原定义默认值的default标签失效,该标签只可用于定义String参数为""。 使用示例: paths: /v1/cards: get: # 该接口设置了查询参数转换为对象的功能,最终所有的参数都会自动定义到一个对象中 tags: - "CARD" summary: "查询所有Card" description: "Returns all Card" operationId: "ListCards" x-is-registered: 'N' x-support-sdk: 'N' x-mybatis-paging: true x-query-param-body: CardQo parameters: - name: "creator" in: "query" description: "creator" required: false type: "string" x-default-empty: true # 使用 x-default-empty 指定creator的默认值为 "" ----- 使用效果: 使用前: public class ListCardsQo implements Serializable { private static final long serialVersionUID = 1L; @JsonProperty("creator") private String creator = null; // 此处生成的creator默认值为 null ------ } 使用后: public class CardQo implements Serializable { // 该示例使用了x-query-param-body指定了对象名为CardQo,所以和使用前的的示例中类名不一样 private static final long serialVersionUID = 1L; @JsonProperty("creator") private String creator = ""; //此处生成的creator的默认值为 "" ------- }
  • 3、x-imports 作用: 自主定义类中需要添加的 import 引用。 标签值类型: List 使用位置: x-imports(当定义在swagger的最外层时,所有的类中都会引入import) components.schemas.model.properties.property.x-imports(当定义在dto的字段中时,只会在该dto类中引入import) definitions.model.x-imports(当定义在dto上时,只会在该dto类中引入import) paths.path.operation.x-imports(当定义在api中时,只会在该api中引入import) 在生成代码的时候,最终会有格式化的一个步骤,类上的无用import会被消除。 使用示例: swagger: "2.0" info: description: "" version: "v1" title: "testSwagger" termsOfService: "http://www.coarl.org/service.html" host: "git.huawei.com" basePath: "/testswagger" x-imports: - "org.springframework.stereotype.Controller;" # 使用的时候结尾一定要带上 ; - "org.springframework.transaction.annotation.Transactional;" 使用效果: 使用前:api类中不生成org.springframework.stereotype.Controller; 和org.springframework.transaction.annotation.Transactional;引用。 使用后:api类中生成如下引用。 import org.springframework.stereotype.Controller; # 通过x-import引入 import org.springframework.transaction.annotation.Transactional; # 通过x-import引入 public interface CARDApi { ------- );