微服务横行的今天, 你的文档跟上节奏了么?

2023-05-16

转载自: https://blog.maxleap.cn/archives/1241


说起微服务, 想必现在的技术圈内人士个个都能谈笑风云, 娓娓道来。的确, 技术变革日新月异, 各种工具框架雨后春笋般涌现, 现在我们可以轻巧便捷地根据自己的业务需求, 构建一个个微服务。

按Wikipedia的解释: 微服务是一种以业务功能为主的服务设计概念,每一个服务都具有自主运行的业务功能,对外开放不受语言限制的 API (最常用的是 HTTP),应用程序则是由一个或多个微服务组成。

跨语言的确是实现了, 但这仅是从编程语言的维度来定义。人与人之间的跨越可就没这么方便喽, 你华山派门下有独门的Restful调用, 我武当派一向Thrift一招走天下。 纳尼!隔壁少林派表示自家金刚Protobuf技压群雄, 在座各位都是。。。

别闹了, 如果大家都把自己的武林秘籍写得通俗易懂, 岂不是人人皆可练百家武学?

一切从README开始


推荐技能: Markdown

难度系数: ★☆☆☆☆

当Boss让你构建一个新项目时, 我相信你是幸运的, 因为迎接你的是崭新的开始, 而不是某位已经离职的前辈留下的天书般的旧项目。


如果你的直觉认同我上述观点, 那么我相信你肯定珍惜这一次编码机会, 于是你开始使用你熟悉的脚手架工具在Gitlab上构建你的空白工程。

什么?! 这就完了? 不不不, 在这之后, 先别猴急着开始写代码, 放松下, 让我们touch一个README, 想象一下你的项目架构应该是怎样的, 大致提供些什么功能, 供别人调用的入口代码应该设计成什么样, 你的项目所需的技术栈有哪些, 甚至能想到的Todo列表等等。

这些都可以先填补到你的README上, 有余力的话甚至可以用一些原型工具(如: ProcessOn,Pencil,Cacoo)设计一些架构草图、时序图那就更好了, 如果你手头的确没合适的工具, 那么尝试用原始的纸笔画一下拍张照片也行。

良好的README样例

(图: 良好的README样例)

一个落落大方的README, 方便了团队的其他成员迅速理解你的项目核心功能, 让人看着就赏心悦目!

用心写好了一个README, 才会感觉自己好像在写一个伟大的项目不是么? 有时候你需要给自己定一个小目标, 给自己一些成就感, 带着愉快的心情去继续你的代码。



优雅的代码风格和注释


推荐技能: Google Java Formatter, maven-javadoc-plugin

难度系数: ★★★★★

代码风格


保持良好的代码风格永远是一件很有意义的事情, 特别是对于一个协作团队, 无法想象彼此混乱的代码风格会导致多大的阅读障碍。

现代化的集成开发环境极大地方便了我们保持整洁的代码。如果你懒得自己去配置, 那么这里有个很好的选择Google Java Formatter。装上它, 这样你的代码永远都是浓浓的google风了。

当然永远记得和你的团队保持一致的步调。

如果你的团队有重度强迫症, 那么像checkstyle之类的工具会比较适合。

除了代码风格, 如果你使用Restful, 那么设计良好的Restful API也是一门必修课。这里推荐阮一峰老师的RESTful API 设计指南。

关于注释


写注释是痛苦的, 但也是很有帮助的。你不一定需要完美地覆盖大部分代码, 这样成本太高, 也没有太大意义。


(图: 关于代码注释)

PS: 这个漫画系列真的蛮搞笑的。 传送门

1. 自文档

让你的代码无需注释就能让人一眼看出作用。这需要你在编码时注意良好的命名和设计。

比如你需要一个定时器时间参数的方法, 如果参数名为time, 那么调用者会疑惑应该传毫秒还是秒? 这时候不妨设计成timeInSeconds或者干脆拆成time+timeUnit

比如你的实现类需要带额外的配置项, 想想一下如果其结构是个Map, 那会是多糟糕的决定, 它会让使用者感到迷茫。这时候你可以动手定义一个专有的配置对象, 或者初始化过程改造为Builder等等。

总之时刻想着以后会维护你代码的那些兄弟, 还有, 未来的你。

2. 对外暴露的代码

比如对外暴露的接口, 工具类等等。因为经常会被别人调用。在这些地方写明详细的用法, 让你的小伙伴们愉快地调用吧。

3. 核心或者晦涩的部分

你可以无视大部分代码注释, 因为80%的代码都是可以在几分钟内被人读懂的。只有剩下的少数重要的或者太过复杂晦涩难懂的部分, 一定要描述一下。

4. 有助于文档生成

如果你的注释会被构建工具识别, 并且可以做一些自动化文档生成的事, 那请一定注意在这些地方适当加上注释。配置这些小工具很简单, 如配置下maven-javadoc-plugin即可生成大量的javadoc。甚至你还可以帮你自动fix一些注释, 何乐而不为呢?

共享你的成果


推荐技能: Postman

难度系数: ★☆☆☆☆

当你终于初步写完了你的代码, 你的微服务终于可以运行起来了。但你没有富余的时间认真写API手册, 你该如何让团队的同事对你的API接口有个大致的了解呢?

如果你使用的是二进制的协议, 像thrift和protobuf这种, 那么没有什么特别好的办法, 建议在DSL描述文件里带上大量注释, 因为一切都是基于这些定义文件。

如果你使用了主流的REST, 那么恭喜你, 繁荣的生态拥有大量的工具来帮你完成这些工作。

比较入门级的, 你有Postman或者Paw(收费)之类的工具可以帮你调试, 这些工具同时也具备分享功能, 你可以共享给前端, 测试组的同事们。

Postman一览

(图: Postman一览)

如果团队比较庞大, 你可能需要在confluence上专门开辟个页面了。

或者使用一个专门的API工具, 像笔者所在的团队使用的RAP, 除了基本的共享, 还可以额外做一些高级的事情。

RAP一览

(图: RAP一览)

认真撰写你的API


推荐技能: Swagger

难度系数: ★★☆☆☆

终于历经测试摧残, 各种bugfix, 你的微服务终于可以公开部署发布了。在欣喜之余, 聪明的你肯定想到需要某种方法来优雅地表达你的API。

Bingo! 挑选一个合适的工具动起手来! 比如鼎鼎大名的Swagger, 只要会一些基本的yaml, 很快就能通过它来描绘你的API。

Swagger编辑器

(图: Swagger编辑器)

于是你很快有了一个swagger文件, 通过它来生成一些UI, 或者干一些其他的事情都是极好的。

纳尼?! 你觉得写yaml太繁琐了你不喜欢???

我们还有RAML或者api blueprint等等一大堆工具呢。

纳尼?! 没有GUI你还是觉得无法接受???

好吧, 那么笔者推荐类似apimatic这类更友好的工具, 你可以导入导出其他格式, 也可以使用其GUI来撰写。这下舒心了吧?

apimatic编辑器一览

(图: apimatic编辑器一览)

通过这些工具, 自动生成文档HTML供大家使用的时候查询, 一切都是这么惬意。

笔者目前的习惯是

  1. 使用apimatic撰写API
  2. 导出为apiblueprint
  3. 使用aglio生成文档HTML
最终效果

(图: 最终效果)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微服务横行的今天, 你的文档跟上节奏了么? 的相关文章

  • 账号和权限管理

    用户 xff1a 超级用户 xff1a uid gid为0 xff0c 超级用户是系统管理员 xff0c 具备系统最高权限 程序用户 xff1a 每个程序在创建时会自动创建一个程序用户 xff0c uid gid为1到999 xff0c 一
  • 科班程序员逆袭为渗透测试工程师的坎坷路(第一篇)

    渗透测试工程师 1 什么是渗透测试 渗透测试 xff08 penetration test xff09 事实上并没有一个标准的定义 xff0c 在国外的大部分安全组织达成的统一说法是 xff1a 渗透测试是通过模拟恶意黑客的攻击方法 xff
  • 《对抗攻击与防御分类方法综述》阅读笔记20220401

    对抗攻击与防御分类方法综述 A Review of Adversarial Attack and Defense for Classification Methods DOI 10 1080 00031305 2021 2006781 文章
  • Docker Desktop功能讲解

    2013 年发布至今 xff0c Docker 一直广受瞩目 xff0c 被认为可能会改变软件行业 概述 许多人并不清楚 Docker 到底是什么 xff0c 要解决什么问题 xff0c 好处又在哪里 xff1f 本文就来详细解释 xff0
  • rman备份报RMAN-00571、RMAN-00569、RMAN-03009

    rman备份时报错信息 xff1a RMAN 03009 failure of backup command on ORA DISK 1 channel at 07 03 2012 10 35 17 ORA 19809 limit exce
  • Scrapy-自动爬虫

    在前面几篇博文当中 xff0c 我们使用Scrapy框架编写的爬虫项目 xff0c 只能爬取起始网址中设置的网页 有时候 xff0c 我们需要让爬虫持续不断的自动爬取多个网页 xff0c 此时 xff0c 我们需要编写自动爬取网页的爬虫 在
  • Scrapy-连接数据库

    通过前面几篇文章的学习 xff0c 我们已经能够使用Scrapy框架写出一些常见的网络爬虫 在本章中 xff0c 我们将使用Scrapy框架 xff0c 将爬取到的数据存储到数据库中 与将数据写入文件一样 xff0c 写入到数据库中也是通过
  • Scrapy-请求和响应

    Scrapy使用Request和Response对象来爬行网站 通常 xff0c Request对象是在爬虫中生成的 xff0c 并在整个系统中传递 xff0c 直到它们到达下载器 xff0c 后者执行请求并返回一个Response对象 x
  • MySQL ERROR 1698 (28000) 错误

    之前MySQL服务端本机上使用密码登陆root账号是没有问题的 xff0c 但是今天不知道是因为动了哪里 xff0c 登陆失败并有这个错误代码 xff1a mysql u root p Enter password ERROR 1698 2
  • Gunicorn-配置详解

    在之前的文章中有记录WSGI容器的作用 xff0c 以及我们知道常见的容器就只有的uWSGI和Gunicorn xff0c 在之前的文章中有记录他们的特性及优缺点 xff0c 在这就不在多做描述 接下来将着重记录一下Gunicorn的一些配
  • YOLOv7升级换代:EfficientNet骨干网络助力更精准目标检测

    目录 一 EfficientNet骨干网络1 EfficientNet架构2 EfficientNet在目标检测中的应用3 EfficientNet分辨率的缩放4 EfficientNet深度与宽度的缩放 二 YOLOv7结构1 YOLOv
  • Python-获取图片的大小

    了解过Pillow的都知道 xff0c Pillow是一个非常强大的图片处理器 xff0c 这篇文章主要记录一下Pillow对图片信息的获取 xff1a 安装Pillow pip span class hljs keyword instal
  • lsnrctl command not found

    在linux安装完oracle时 当你遇到lsnrctl command not found等问题都不能用时 会有几种情况 1 首先你先查看下环境变量里面有没有加入oracle的配置 执行 echo ORACLE HOME 没有的话 你执行
  • Ubuntu 18.04-安装图文教程

    Ubuntu xff08 友帮拓 优般图 乌班图 xff09 是一个以桌面应用为主的开源GNU Linux操作系统 xff0c Ubuntu 是基于Debian GNU Linux xff0c 支持x86 amd64 xff08 即x64
  • Docker-DockerFile的使用

    在使用DockerFile定制镜像之前 xff0c 我们先来了解一下镜像的构成 xff1a 镜像是容器的基础 xff0c 每次执行docker run命令的时候都会指定哪个镜像作为容器运行的基础 在之前的栗子中 xff0c 我们使用的镜像都
  • Python-标准库calendar的使用

    此模块允许你输出类似Unix cal程序的日历 xff0c 并提供与日历相关的其他有用功能 值得注意的是 xff0c 默认情况下 xff0c 这些日历将星期一作为一周的第一天 xff0c 将星期日作为一周的最后一天 欧洲惯例 不过 xff0
  • Docker MySql报2059错误: Authentication plugin 'caching_sha2_password' cannot be loaded

    最近在使用Docker安装和配置MySql xff0c 按照正常的步骤来安装和配置MySQL xff0c 可配置完成后登录MySQL客户端出现了2059错误 xff0c 于是上各种博客 技术论坛寻求相关的问题解决办法 xff0c 可是仍然找
  • 套接字与文件

    在Linux中 xff0c 所有套接字都是文件 xff0c 操作系统并不区分套接字和文件 xff0c 因此对二者可以使用相同的读写函数
  • MySQL中find_in_set函数的使用

    1 语法 FIND IN SET str strlist xff08 1 xff09 str 要查询的字符串 xff08 2 xff09 strlist 字段名 xff1b 参数以 分隔 如 1 2 6 8 查询字段 strlist 中包含
  • C文件创建并写入文件

    创建并写入文件 u003Cstdio h gt nint main n n t 创建一个名为data txt的文件 n tFILE pFile 61 fopen 34 data txt 34 34 w 34 n tif pFile 61 6

随机推荐

  • 关于海康摄像头的摘要认证

    最近在做一个项目时候要用到摄像头人脸抓拍 xff0c 人脸识别等功能 xff0c 原本使用海康的SDK就可以解决的 xff0c 但是我们项目是在arm平台下开发的 xff0c 而海康的SDK不支持arm平台 xff0c 无奈联系的海康的技术
  • 华为OD机试真题2023(JAVA)

    目录 华为OD机试是什么 xff1f 华为OD面试流程 xff1f 华为OD机试通过率高吗 xff1f 华为OD薪资待遇 xff1f 华为OD晋升空间 xff1f 大家好 xff0c 我是哪吒 本专栏包含了最新最全的华为OD机试真题 xff
  • ARM的快速上下文切换(FCSE)

    一 FCSE的原理 通常情况下 xff0c 如果两个进程占用的虚拟地址空间由重叠 xff0c 系统在这两个进程之间进行切换时 xff0c 必须进行虚拟地址到物理地址的重映射 而虚拟地址到物理地址的重映射涉及到重建MMU中的页表 xff0c
  • 使用PyQt5/PySide2编写一个极简的音乐播放器

    文章目录 一 创建UI界面二 获取网络歌曲三 创建和链接信号槽 疫情肆虐 xff0c 憋在家实在无聊 xff0c 索性写点东西 xff0c 于是就有了这个极极极极极简的音乐播放器 这个极极极简的音乐播放器类似于 阅后即焚 的软件 xff0c
  • Android zxing二维码扫描 扫描框适应各种分辨率

    public synchronized Rect getFramingRect if framingRect 61 61 null if camera 61 61 null return null Point screenResolutio
  • 实战:MySQL Sending data导致查询很慢的问题详细分析

    这两天帮忙定位一个mysql查询很慢的问题 xff0c 定位过程综合各种方法 理论 工具 xff0c 很有代表性 xff0c 分享给大家作为新年礼物 xff1a xff09 问题现象 使用sphinx支持倒排索引 xff0c 但sphinx
  • TypeScript入门到入土(3)webpack打包ts代码

    上一节我们讲了ts的编译选项 xff0c 这一节我们介绍利用webpack打包我们的ts代码 前文链接 xff1a TypeScript入门到入土 xff08 2 xff09 小杨爱编程的博客 CSDN博客 ts 的安装以及ts中类型 xf
  • ROS中关于topic和service的运用场合

    本文的翻译来自 ROS answers 官方的问答区 2014 7 30 点击打开链接 topics seem like the best way for storing 34 states 34 of the robot stateful
  • 又见一帘幽梦

    又见一帘幽梦 最是魂断伤心处 xff0c 浮生若残梦 冷遇秋 xff0c 夕阳下 xff0c 碧野又清空 xff0c 泪眼朦胧 一帘幽梦红尘路 xff0c 爱深处 xff0c 情留驻 秋菊相思 xff0c 旭日重生 xff0c 无奈生死殊途
  • Openfeign ErrorDecoder caused java.io.IOException: stream is closed

    实现错误解码器 保留 feign 服务异常信息 xff0c 左侧是之前设计的 偶尔下游系统出现异常时 xff0c 拿到返回结果时 xff0c 居然会是stream is closed xff0c 就找了下原因 Don 39 t use an
  • 鞋厂园区--稳食生涯--2017~2018

    2017年初 进入广州的鞋类企业搞数字化新零售中台业务开发 这个地方 应该是我进入电商新零售业务的启蒙和提升之地 不但学习了线上线下的电商与门店业务 也学习了完整的一套新零售中台业务技术架构和整体的微服务演变进程 同时也应该算是收获最多朋友
  • 棉类工业园--奋斗的故事--2018~2020

    nbsp 2018年8月 进入深圳的工业园继续搞数字化新零售中台业务开发 18年初步规划设计 从0到1打造整个电商与新零售中台体系 1 用户中心 用户表 角色表 系统表 菜单表 用户角色表 角色菜单表 角色系统表 数据范围表 用户数据范围
  • YOLOv5改进:引入DenseNet思想打造密集连接模块,彻底提升目标检测性能

    目录 一 密集连接模块的介绍1 密集连接的概念2 密集连接与残差连接的对比3 DenseNet的结构 二 YOLOv5中引入密集连接模块的原因1 密集连接模块对于目标检测的优势2 密集连接模块对目标检测性能的影响 三 YOLOv5中密集连接
  • 不是我写的原文

    青春的尾声悄然敲响 xff0c 我站在尽头送别剩下为数不多的光阴 婚礼上同学聚会上 xff0c 越来越多的人开始为人妻为人母 xff0c 我们在经受着一场不可逆的转变 转变以前是快乐的 xff0c 转变后也会是另一种快乐 xff0c 但是转
  • 我这是一条什么路

    首先 xff0c 我从未在这里发表博客 xff0c 有些胆战 其次 xff0c 我技术不精 xff0c Java web php Android 再次 xff0c 没有共享过源码 xff0c 倒是从不少开源代码获益 最后 xff0c 这也许
  • 在珠海的一年

    时间倒退到2013年 作为应届生 xff0c 初入职场 xff0c 来到珠海 xff0c 开始了我IT生涯的第一步 以Java初级程序员的身份 xff0c 加入一家港企 xff0c 位于珠海的香洲区唐家湾镇 xff0c 还真的是一个镇啊 一
  • Hadoop的构造模块

    Hadoop集群中运行的守护进程共有5类 xff1a NameNodeDataNodeSecondary NameNodeJobTrackerTaskTracker Hadoop集群中的机器 节点 分为2类 xff1a 主节点和从节点 xf
  • 通过yum来进行mysql的安装

    1 卸载掉原有mysql rpm qa grep mysql 这个命令就会查看该操作系统上是否已经安装了mysql数据库 rpm e mysql 普通删除模式 rpm e nodeps mysql 强力删除模式 xff0c 如果使用上面命令
  • 因为咳嗽

    看了下我曾写过的博客 xff0c 居然发现年初的时候 xff0c 原来也咳嗽的撕心裂肺一次 xff0c 而这次又发作了 xff0c 我预估这是一种很严重的肺炎 xff0c 但还没去医院检测过 xff0c 心情甚是忧伤 回头望了下自己这几年写
  • 微服务横行的今天, 你的文档跟上节奏了么?

    转载自 xff1a https blog maxleap cn archives 1241 说起微服务 想必现在的技术圈内人士个个都能谈笑风云 娓娓道来 的确 技术变革日新月异 各种工具框架雨后春笋般涌现 现在我们可以轻巧便捷地根据自己的业