后山


  • 首页

  • 标签

  • 分类

  • 归档

基于 OpenAPI 撰写接口文档

发表于 2019-12-24 |

为什么要用 OpenAPI

本来叫“基于 swagger 撰写接口文档”,但是一番搜索阅读之后发现 swagger 已经抽象出了一套接口描述规范,并将其命名为 OpenAPI。在 OpenAPI Specification 的基础上,扩展了很多相关的工具集。
官方的说明文档在此,进一步说明文章网上到处都有。

swagger 工具集包括以下组成部分:

  • 规范 - 整个体系的理论基础。
  • Swagger Editor – 基于浏览器的所见即所得编辑器.
  • Swagger UI – OpenAPI 文件生成交互式 API 文档
  • Swagger Codegen – OpenAPI 文件生成客户端/服务端代码
  • SwaggerHub - 协作平台,在集成了以上开源工具外增加了在线托管、分享等功能
  • Swagger Inspector - 测试 API 和生成 OpenAPI 的开发工具
  • 解决方案 - 组合一个或多个工具(包括其他闭源工具)解决接口的设计、开发、测试过程中遇到的问题
  • 还有基于规范的其他开源工具,可以组合使用,例如导出 md 后再转成 word

如何使用/工作流程

先有接口后生成文档

  1. 整理已有的接口
  2. 生成静态的 OpenAPI spec
  3. 根据 OpenAPI spec 生成文档 / 使用在线的 Swagger UI 生成可交互文档

先有文档再写接口

  1. 在 Swagger Editor 中编写 OpenAPI spec
  2. 使用 OpenAPI spec 生成文档
  3. 使用 OpenAPI spec 生成代码

实战

现在的需求是写一份接口文档,docx ,接口还未实现。
注意:OAS 最新版是 3.0 ,但是很多开源工具只支持到 2.0 ,因此要按照 2.0 来写文档。
导出 md 需要根据文档添加配置。

  1. 在 http://editor.swagger.io/ 完成接口文档撰写
  2. 使用转 markdown 工具得到 md 文件 https://github.com/Swagger2Markup/swagger2markup-cli
  3. 在 http://coolaf.com/tool/md 得到 doc 格式文件

Mac 下 Python 环境管理

发表于 2019-11-20 |

Mac 通用

  1. 代理软件:需要有梯子
  2. 命令行代理工具:proxychains4
  3. hombrew:需要定期 brew update 更新版本

tips: 关于编译 python 缺少依赖的问题,在 macOS 下有一个非常容易解决的方案,用 brew install python 安装一个解释器,brew 会将相关依赖全部更新一遍。这样之后 pyenv 编译时就不需要再解决环境依赖了。

pyenv

pyenv 用于管理不同版本的 python 解释器十分方便,但是有以下注意点:

  1. 编译时缺少环境依赖会导致部分内建库无法正常使用,Mac 需要运行 brew install openssl readline sqlite3 xz zlib 以及 sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /,详见这里。
  2. 安装 aria2c 的情况下强制使用 aria2c 进行下载,需要将 –all-proxy 配置到 PYTHON_BUILD_ARIA2_OPTS 中。也可以通过其他途径下载到 pyenv root 目录下的 cache 目录内再重新 install 跳过下载步骤。

学习笔记

发表于 2019-10-28 |

前言

本笔记为 《Java 核心技术》和 《Java 编程思想》两本经典书籍的学习笔记。
不期望读完这两本书就编程高手,但只求能对 Java 语言本身及其生态有正确的认识,以及找到一个合适的起点。

语言特色

语言有累赘
完整的平台、易于理解的语义、高质量的执行环境、庞大的库、虚拟机和垃圾收集
不同版本的 Java 类库规模不一样
即时编译-部分字节码翻译成机器码
applet 过时了,Java 写 UI 过时了。

语言基础

Unicode 转义序列会在解析代码之前得到处理。
char 类型描述了 UTF-16 编码中的一个代码单元,建议不要使用。用 String。
boolean 类型和整型值不能互换。
浮点数默认为 double,大数应用 BigInteger BigDecimal。
运算符不能重载,字符串不应使用 == 做比较。
变量类型是变量所引用的对象类型,长度不一致但是每个元素类型一致的数组类型视为同一种变量类型。
8 种基本类型以外都是对象变量。Java 种的引用相当于 C++ 的指针。
更改器方法修改原来的对象,访问器方法仅访问
静态域被成为类域。
本地方法可以绕过 Java 语言的存取控制机制。
Java 程序设计语言总是采用按值调用。
重载 overload 一个名字不同参数。重写 override 子类覆盖父类同名方法。

运行环境

jdk,包括基础的编译器 javac、虚拟机 java、官方库和文档等。
IDE 集成开发环境可以支持多个版本的 jdk。一个项目包括多个模块 module,一个模块包括多个 package,一个 package 包括多个类文件 class,类文件的文件名与类名一致。
程序运行时必须有一个入口类。
IntelliJ IDEA project Module & Java 9 Module

基本特性

基本数据类型 8 种:4 整型、2 浮点类型、1 char 类型、1 boolean 类型
变量
运算符
输入输出
控制流程
字符串、数组
对象与类,静态方法、对象构造
类的继承
反射(或自省):能够分析类能力的程序
接口 interface
lambda 表达式:java 没有函数这一类型,只能用于函数式接口
方法引用:等价于同效果的 lambda 表达式
内部类
代理
异常
断言
日志
泛型
集合:接口有迭代器等,实现有链表、散列集、树集等

并发

线程
线程状态
线程调度器
线程优先级
守护线程 daemon thread:计时线程
未捕获的异常处理器
线程组
竞争条件下同步存取
锁对象 ReentrantLock
阻塞队列
线程安全的数据结构实现
执行器-线程池
同步器

注意事项

  1. java version “1.8.0_131” 使用 IntelliJ IDE 运行会报错,可安全忽略。安装最新的 Java 8 可解决。

IntelliJ IDEA 运行 corejava 示例的方法

  1. open 打开示例文件夹
  2. Project Structure - Project 设置 JDK 版本、language level、output
  3. Project Structure - Modules 设置 Sources
  4. 找到示例入口类,右击运行 Run

可以将所有示例的 output 地址统一设置为 /Users/caisudong/Projects/java/corejava/output

macOS 配置使用 IntelliJ IDEA 右键打开目录的方法

  1. 打开 Automator ,新建一个 Quick Action
  2. 选择 Libirary-Utilities-Run Shell Script,配置 folders in Finder.app,as arguments
  3. 在 shell 内容中输入
1
2
3
4
for f in "$@"
do
open -a "IntelliJ IDEA" "$f"
done

结果如下图
image.png

程序设计语言——实践之路读书笔记

发表于 2019-09-24 |

待复习,做复习题

一:引言:本书的核心 3、6、7、8、10

编译:从一种语言到另一种语言的非平凡的自动翻译
预处理器、编译器、汇编器
自举、迟约束、字节码和即时编译器、微代码(固件)

核心章节

名字、作用域和约束
控制流
数据类型

核心感悟

子程序是控制抽象,类是数据抽象:刚好是对冯.诺依曼计算机的两个大类程序和数据的进一步拆分。
动态与静态一般根据运行是否区分,只是一个非常粗略的说法。
命名:使用模块等进行信息隐藏,增加信息量,减少使用别名

程序员工具箱

编辑器
美观打印程序
风格检查程序
配置管理工具
精读工具
剖析 profile 性能分析工具、排错程序

趋势:集成化

编译概览

前端和语义
后端和目标程序
编译遍

词法分析:单词
语法分析:语法分析树/上下文无关文法
语义分析:符号表,抽象语法树(简称语法树)
代码改进

二:程序设计语言的语法

扫描器-正则表达式-词法
编译器-上下文无文法-语法制导翻译

推导、句型、句子,规范推导=最右推导,通常最左或最右
语法的歧义:一个串生成多个语法分析树

LL:从左向右,最左推导,自上而下,预测性
LR:从左向右,最右推导,自下而上,移入规约
递归下降语法分析器
语法错误恢复,应急模式,异常处理机制,局部最小代价错误恢复

理论基础

正则表达式和有穷自动机等价

三:名字、作用域和约束

加工:激活各个声明,创建约束,分配堆栈空间
值的一级、二级、三级:值至少是三级,二级的值可作为参数传递,一级的值可以作为返回值可赋给变量

约束和约束时间

语言设计时、语言实现时、写程序时、编译时、连接时、装入时、运行时

生命周期和存储管理

约束的生存期与对象的生存期不一定重合
生命周期和存储管理:静态对象-绝对地址,栈对象-后进先出,堆对象-任意
堆分配算法:最佳适配算法-伙伴系统和斐波那契堆
显示释放堆对象 vs 废料收集(垃圾回收)机制

作用域规则

静态/词法作用域

通过检查程序正文确定约束
嵌套:最内嵌套作用域规则,运行时使用静态链寻找外围作用域
模块:封装一组对象,内部可见,外部导入。是否显式导入区分闭作用域和开作用域。
在不同语言有各种名字,聚合、包、名字空间等。
以模块作为管理器/类型

动态作用域

一个给定名字的当前约束是最近遇到的还没有撤销的约束
该方式令程序更难以理解,好处不突出。

引用环境的约束

深约束:创建时建立引用环境
浅约束:调用时建立引用环境
闭包:将显式的引用环境与有关子程序的引用捆绑的整体。

重载 overloading

同一个名字引用多个对象。
符号重载:+-等对应不同值的计算。
枚举常量重载:根据类型不同
函数重载:根据参数不同

六:控制流

表达式求值

优先级和结合性
赋值:命令式语言高度依赖副作用
变量的值模型和引用模型:Java 对内部类型采用值模型,对类采用引用模型
正交性:让语言特性尽可能任意组合
表达式重整:通过括号阻止
短路求值,短路运算符和非短路运算符

Goto 结构化和非结构化的流程

结构化程序设计强调自顶向下
都被替代了:

  • 循环中退出
  • 子程序提前返回
  • 错误和异常

顺序复合

{}

选择

短路条件: elif 的条件可能不执行
分情况开关:case/switch,线性转跳表、顺序检查、散列、折半搜索

迭代

枚举控制
逻辑控制,前检查后检查
组合循环
迭代器

递归

都可以改写为迭代,或改写为尾递归
应用序求值和正则序求值

非确定性 nondeterminacy

并列执行/并列语句,卫式命令
卫式命令的大多数实现都不能证明是公平的

七:数据类型

类型系统

  1. 类型的定义
  2. 类型等价、类型相容、类型推理的规则

类型检查目的是保证程序遵守类型相容性规则
声明:引入一个名字和作用域
定义:描述了名字约束的类型

  • 强类型:有时作为形容词形容贯彻类型规则的程度
    • 静态类型:编译时执行所有类型检查
    • 动态类型:运行时类型检查,迟约束的一种形式

标量类型/简单类型

  • 离散/序数类型
    • 整数
    • 布尔
    • 字符
  • 有理数类型
  • 实数类型
  • 复数类型

枚举类型:一组命名元素
子界类型:某个离散的基类型的某个连续子集

复合类型/结构类型

类型构造符+简单类型

类型检查

类型等价

结构等价:每种结构算一个类型
名字等价:每次定义算一个类型

  • 严格名字等价:别名不同
  • 宽松名字等价:别名等价

类型转换

非变换的类型转换:改变类型但并不修改基础二进制位

八:子程序和控制抽象

语言列表

Algol 60
Algol 68
Pascal
C
ML
Java
Clu
Perl
Euclid
Turing
Ada

Java 学习之路

发表于 2019-09-23 |

当前目标

对《程序设计语言-实践之路》的进行学习,并参照 Java 的语法、虚拟机原理整理至少一篇学习笔记

前言

不知不觉工作三个年头整了,2016 年选择了 Python 入坑,也非常幸运地在工作一开始就遇到了很棒的小伙伴,非常感谢这三年跟我一起进步的小伙伴们。
Python 是一个对新人很友好,能干很多事情的语言,是万能的胶水语言,以及做实验最佳语言。但是她的短板也很明显,不适合代码量较大的工程,容易失控,运行效率也不高。哪怕是面向工资编程,相关工作的高薪也不是来自于 Python,而是算法。
因此以后每年都应当接触一个新的语言,并利用其特色写一个能运行的 demo。
去年订的目标是考研,可惜碰到了加班很多的工作,并没有时间。希望能定一个更自由的目标,然后去达成。

Java 能做什么

Java SE(Java Platform,Standard Edition),应该先说这个,因为这个是标准版本。
Java EE (Java Platform,Enterprise Edition),java 的企业版本
Java ME(Java Platform,Micro Edition),java 的微型版本。

可以看出,Java 可以用于服务端编程、桌面编程和嵌入式编程,分别运行于服务器、个人电脑和嵌入式设备。主要用于服务端编程和安卓开发,其他领域并不占优。并且在安卓开发这一块也逐渐被 kotlin 取代。因此学习 Java 的主要应用领域就是服务端编程。

学习 Java 就是学习服务端编程

学习路线图

  1. 对《程序设计语言-实践之路》的进行学习,并参照 Java 的语法、虚拟机原理整理至少一篇学习笔记。
  2. 结合 《设计模式》及视频课程,使用 Java 完成相关设计模式并上传到 github。
  3. 结合开源大数据组件,学习其原理及应用场景。
  4. 结合个人需求,使用 SpringBoot 等主流技术完成一个 demo。(到实施的时候问前辈的建议)
1…345…9
Hieast

Hieast

快速学习者,高校慕课平台深度使用者,专注于挖掘数据的价值。目前从事 Python 数据开发,自媒体数据采集、分析和应用相关工作。

44 日志
5 分类
32 标签
RSS
GitHub E-Mail
© 2016 — 2020 Hieast
主题 — NexT.Pisces