问题 Postman 想必大家已经很熟悉了,本文不做过多介绍。在文章开始之前,请允许我提出以下几个问题。如果这些问题您都了然,请迅速关闭这个页面并立马去做更重要的事情。 Postman 中如何设置路径参数? 例: GET /posts/{id},如何为 id 字段赋值。 Postman 中的变量的作用域有哪些? Postman 中如何修改 HTTP 请求报文? 例1:对请求参数进行重排序并生成签名 例2:对请求参数进行加密 Postman 中如何完成链式调用? 例1:一键操作,串行调用xx列表接口、xx详情接口。 例2:在调用业务接口之前,先从公共接口中获取 token 字段。 Postman 中如何校验和遴选 HTTP 响应报文? 例1:如何对响应报文进行校验 例2:如何使用可视化的方式,高亮显示关键数据? 如果你对上述问题抱有好奇,那好,我们今天便来聊聊 Postman 中一些被不为人知却非常有用的功能。 利益不相关声明: 本文采用「和风天气API」与「心知天气API」进行讲解示范。 在互联网愈加封闭的今天,很庆幸仍有这些不忘初心的企业为我们提供如此简单易得的接口服务。 正文 1. PathParam 路径参数 RESTful 形式的接口通常会有一些参数被放置在 URL 中。例如:GET /posts/1,其中的 1 表示 post 的 ID。 Postman 虽未提供明显的 UI 界面来设置路径参数,但我们可以在 URL 输入栏中以:params的形式来添加路径参数,如下所示。...
Kotlin中多态对象的JSON序列化
前言 在最近的项目中,我同时用到了 Moshi 和 kotlinx-serialization 这两个 JSON 库,两者的 API 都很简洁且实用。 与 Gson 的反射机制不同,Moshi 和 kotlinx-serialization 都提供了预编译机制,可以在编译期间分别生成 Adapter 和 Serializer,从而能够以类型安全、更高效的方式完成 JSON 的序列化和反序列化。 Moshi 源于 Square ,与 Retrofit 的集成度较高,对 Android 平台的开发者比较友好 可以借助 kapt/ksp 在编译期生成 XxxJsonAdapter.kt 文件 kotlinx-serialization 源于 JetBrains,属于官方推出的扩展包,能够很方便的集成到 Ktor 中 基于 kotlin compiler plugin,在编译期生成字节码文件(Xxx$$serializer.class) 支持 KMP,能够跨平台使用。 例如:定义一套 DTO,同时在 Android端、iOS端、前端、桌面端、服务端复用。 官方支持 JSON、Protobuf、CBOR、Hocon、Properties 等格式 有大量的三方扩展,支持 TOML、XML、YAML、BSON、NBT、SharePreference、Bundle 等格式 如果你在使用 kotlin 进行日常开发工作,非常推荐你去体验和使用这两个 JSON 库。...
Java Exception 历史回顾
Java Exception 历史回顾 前言 本文从 Exception 的起源讲起,试图帮开发者建立对 Java、Kotlin 编程语言异常处理机制的感性认知。文章内容出自个人理解,如有纰漏,还请各位看官斧正。 1990 年前后, Sun 公司的工程师团队在项目开发中经历了 C++ 的诸多痛点,对此 Sun 公司内部成立了 Stealth 计划小组(后改名为 Green 计划小组)来解决这些痛点问题。小组起初进行了多种尝试:有切换编程语言到 NexT 的;也有尝试改进和扩展 C++ 的,但都宣告失败。最终小组内的 James Gosling ( Java 之父) 决定创造一个新的编程语言来解决问题。他以办公室外的橡树为名,把这一编程语言称为 Oak,随后因商标原因将其更名为 Java。 Java 语言的开发过程中广泛借鉴了 C/C++ 的特性,C++ 中的异常处理机制也被沿用了下来。 C++ 语言中的异常 异常:表示程序中意料之外,情理之中的一类错误。 C++ 中的异常处理是一种条件转移机制,当程序在运行过程中遇到 throw 关键字时,会中止当前的程序代码块并跳转到最近的 catch 代码块执行后续操作。这一行为对 C 语言中的 goto 机制,以及汇编语言中的转移指令(如:jmp)。 C++ with Exception C/C++ with Goto 在 C 语言体系中,goto 因过于灵活和难以调试,常被诟病为邪恶的。常见的规避手段是使用 int 类型的返回值表示函数的执行状态,通常用 0 表示执行成功,非0表示执行失败。但上述做法违背了函数返回值的用途,导致大量库函数不得不增加额外的形参作为真实的返回值,如下所示:...
使用 Android 原生命令开启 WiFI ADB
Android 设备需要提前 root 命令方式 使用 PC/Mac 需要 USB 连接 Android 设备后执行以下命令 1 adb tcpip 5555 使用 Termux 无需 USB 线 , Android 设备需安装 termux app 在 Termux 中执行以下命令 开启 WiFi ADB 1 2 3 4 5 # 设置 ADB 服务的端口为默认端口 su -c 'setprop service.adb.tcp.port 5555' # 重启 ADB 守护进程以便 prop 生效 su -c 'stop adbd' su -c 'start adbd' 关闭 WiFi ADB 1 2 3 4 5 # 重置 ADB 服务的端口 su -c 'setprop service....
ICS-OpenVPN 编译小记
编译环境 Key Value CPU 架构 arm64 CPU 型号 M1 Pro 操作系统 macOS Monterey 12.0.1 Android Studio arm64 Preview, 2020.3.1 Patch3 NDK 21.4.7075529 Swig@3 3.0.12 CMAKE 3.10 编译步骤 克隆或下载 ics-openvpn,并使用 Android Studio 打开 在 Android Studio 中安装最新的 cmake 和 ndk 在终端中进入 ics-openvpn 项目根目录,执行 git submodule init 、git submodule update 使用 homebrew 安装 swig@3: brew install swig@3 将 swig 命令添加到 PATH 中: export PATH="/opt/homebrew/opt/swig@3/bin:$PATH" 在 ics-openvpn 项目根目录执行 gradle build
聊聊分支管理
前言 背景 大多时候,开发人员仅需使用少量的分支,甚至只需 master 和 develop 两个分支即可完成日常工作。这足以应付小型项目或小规模团队的开发工作,但随着协作人员的增多和项目周期的延长,各样的挑战便会纷至沓来… 代码版本控制的挑战 并行开发:如何开始一个 feature 的开发,而不影响别的 feature ? 代码回溯:如何了解每次提交做了哪些工作,如何让提交记录承载软件文档的功能? 代码回溯:随着时间的流逝,如何快速了解每个分支都做了什么? 分支管理:由于新分支的创建是廉价的,分支多了之后该如何管理? 发布管理:如何进行发布管理?发布时如何冻结 Feature 的合并?发布过程中如何修复线上 bug?发布过程中如何并行开发新功能? 修复管理:线上代码出 Bug 后如何快速修复?修复后的代码如何安全、优雅的合并到所有协作者的工作分支中? 代码维护:如何在多人员的并行开发过程中保证代码质量? 面临这些挑战,本文试图提出一种简洁的、清晰的、可执行的分支管理方案,以期能够规避一些常见的版本控制陷阱,提高协作效率,增强知识共享,降低维护成本。 本分支规范的目的 提高协作效率:基于 git 的分布式实现,发挥并行开发的优势 增强知识共享:提交记录即文档,使其成为知识的载体之一,使得项目变更具有回溯性 降低维护成本:通过清晰的分支划分,简化代码集成过程、问题修复过程,使得项目的集成更可控 代码提交规范 好的提交记录是分支管理的基石,在讲述分支管理之前,务必先了解代码提交规范。 git commit 规范及原则 单一职责原则:细化提交粒度,每次提交内容应少而精,职责清晰,任务单一,拒绝将多个改动汇聚到同一个提交记录中 基于第一点,每次提交日志应尽可能的准确,详细阐述本次提交的改动内容,必要时可详细阐述改动的原因并给出相关链接。下附提交日志格式,以供参考。 第一行,简述变更内容,对于简单改动,仅填写此行信息即可。控制在 72 个半角字符以内,避免 Web 端自动换行 第二行,保持空行 第三行,详细变更 1,必要时需说明变更原因 第四行,详细变更 2,必要时需说明变更原因 第五行,相关链接(Wiki、RFC、技术博客等)... 拒绝空日志、重复日志、无意义的提交记录 避免不完整的提交,确保推送至远程分支的代码都是可运行的 如有某次提交不完整的情况,可在推送至远端前采用git commit --amend 的方式完善上次提交的内容 避免过于琐碎的无意义提交,尽量保持提交记录清晰可读...
自定义 Gradle 插件开发(一)
Gradle 插件简介 Gradle 插件是一个能够将 Gradle 的构建逻辑(build logic)和构建任务(build task)打包到一起,以便在多个项目的构建脚本(build.gradle)中应用(apply)的工具。 例如,build.gradle 构建脚本文件内 apply plugin: 'java' 、apply plugin: 'com.android.application' 中的 java、com.android.application 就是官方提供的 Gradle 插件,通过应用这些插件,可以丰富项目的构建任务与构建逻辑。 除官方提供的插件外,Gradle 还允许开发者定义自己的 Gradle 插件。开发者可以根据实际需求定义自己的构建逻辑和构建任务,将其打包为 Gradle 插件,从而在多个项目的构建脚本中复用。此外,还可以将自定义的 Gradle 插件发布到 plugin portal 或其他仓库中,更为方便的分享给他人使用。 Gradle 插件对编程语言没有太多限制,只要是能够被编译为 JVM 字节码的编程语言,都能用来编写 Gradle 插件。Gradle-API 的被设计为对 Groovy、Java、Koltin 友好的,通常情况下,使用 Java 或 Kotlin 这类静态类型语言实现的 Gradle 插件的性能要比使用 Groovy 实现的相同常见的性能更好。 开始之前 Gradle 作为一个普通的构建工具,本身并不依赖任何可视化 GUI 工具。为简化步骤,本文将采用命令行方式来完成自定义 Gradle 插件的演示。在开始之前,需先将 gradle 命令添加到系统环境变量中。 若读者在 IDEA / Android Studio 使用过 gradle ,则可在当前用户目录下找到 gradle 命令,具体路径如下 Mac:/Users/当前用户名/.gradle/wrapper/dists/gradle版本/沙盒路径/gradle版本/bin Win:C:\Users\当前用户名\....
Kotlin/Everywhere BeijingGDG 见闻录
Kotlin-Everywhere 在今年五月份的 Google I/O 大会上,Google 宣布了 Android 应用开发中 Kotlin 优先的战略,此后 Google 提供的 API(例如 Jetpack 工具库)将以 Kotlin 优先。大会结束后不久,Google 便联合 Jetbrains 在全球范围内推出了 Koltin/Everywhere 计划。Kotlin/Everywhere 计划 是由各地社区主导的一系列活动,旨在关注 Kotlin 在多平台上的潜力,并为学习 Kotlin 的基本要素与最佳实践提供帮助,包括但不限于 Android、服务端、前端和其他平台。 Kotlin-Everywhere Beijing 笔者有幸和一位朋友一起参加了北京 GDG 与 Kotlin 中文社区共同主办的 Kotlin/Everywhere Beijing ,这场活动的嘉宾阵容空前强大,台下观众高朋满座,各路大咖云集,可谓之国内规格最高的一场 Kotlin/Everywhere 活动。会议的全程录像可在 大咖说 回放。 日程安排 时间 主题 嘉宾 9:00-10:00 签到入场 - 10:00-10:10 开场介绍 韩国恺 10:10-10:50 What’s New in Kotlin Svetlana Isakova 10:50-11:30 携程 Kotlin Multiplatform 工程实践 陈琦 11:30-12:10 潜力无限:Kotlin 用于服务端与 WebAssembly 贾彦伟 12:10-13:40 中午午休 - 13:40-14:20 Boost Your Productivity with Kotlin 陈龙博 14:20-15:00 Be Friends with kotlinc 段建华 15:00-15:20 下午茶歇 - 15:20-16:00 Kotlin High-Performance Programming 朱涛3 16:00-16:40 Kotlin Coroutine 朱凯 16:40-17:20 Kotlin 函数式编程 乔禹昂 上午 我和朋友于九点半到达活动会场,会场签到处有 kotlin 主题的挎包、徽章、冰箱贴、贴纸等伴手礼,签到进场后发现观众席已落座 300 余人,便匆忙在一个靠中间的位置坐下,会场大屏播放着 Kotlin 相关的视频,视频中世界各地的开发者在表达着对 Kotlin 语言的喜爱,现场观众席也充斥着对 Kotlin 的探讨之声。...
MultiType 源码学习小结
MultiType 是一个为 RecycleView 创建多种 Item 的 Android 库,它的设计简洁优雅,源码阅读体验也很好,本文记录了笔者研读此项目源码的感悟。 MultiType 的简单使用 开始之前,先来看下 MultiType 的总体类图 图中左侧 MultiTypeAdapter 是供外部访问的主要类,它的使用方式如下。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 class SampleActivity : AppCompatActivity() { private lateinit var adapter: MultiTypeAdapter private lateinit var items: MutableList<Any> override fun onCreate(savedInstanceState: Bundle?...
使用 Android Studio 阅读 AOSP 源码
上一篇文章介绍了 AOSP 9 在 macOS 10.14 环境下的编译方式,本文就 Andorid Studio 环境下阅读 AOSP 源码的方式进行记录。 阅读前 AOSP 的准备 开始之前我们先为 AOSP 生成 IDEA 工程文件,便于稍后在 Android Studio 中载入。 1. 为 AOSP 生成 Android Studio 工程配置文件 1 2 3 4 5 6 7 8 cd /Volumes/AOSP # 设置 AOSP 编译所需的环境变量 source build/envsetup.sh # 使用 idegen.sh 脚本生成 IDEA 工程文件 development/tools/idegen/idegen.sh ------------------------------- Read excludes: 4ms Traversed tree: 68826ms 稍等片刻,即可在 AOSP 目录下看到生成的 android.iml 和 android.ipr,其中 iml 文件 表示 information of modules, 用来描述 AOSP 的模块信息。ipr 文件 表示 IDEA project configuration ,用来描述 IDEA 的工程配置信息,双击此文件时系统将直接使用 Andorid Studio 打开此项目。...