axenov / pm-convert
Postman 集合转换器
Requires
- php: ^8.1
- ext-json: *
- ext-mbstring: *
- ext-readline: *
Requires (Dev)
- phpunit/phpunit: ^10.3
README
将 Postman 集合转换为不同的格式。
非常快。
离线。
无第三方依赖。
目前支持的格式有: http
、curl
、wget
。
这个项目是在我的业余时间开始和快速编写的,为了解决一个 NDA 项目中的一个问题,因此它可能包含愚蠢的错误,并且(肯定)没有覆盖根据集合模式的所有可能情况。请随时提出您的改进意见。
不支持比最新版本更早的版本,只支持当前版本。如果您在旧版本中发现了错误,请确保您发现的错误已经在最新版本中修复。因此,请始终使用 pm-convert
的最新版本。
支持的功能
- 集合模式 v2.1 和 v2.0;
- 用存储在集合和环境文件中的变量替换请求中的变量;
- 将一个或多个集合(甚至整个目录)导出为支持的一种或所有格式;
- 所有头部(包括禁用
http
格式); json
主体(强制头部Content-Type
为application/json
);formdata
主体(包括禁用http
格式的字段;强制头部Content-Type
为multipart/form-data
)
计划中的功能
- 尽可能多地支持所需的身份验证类型(目前仅支持
Bearer
); - 尽可能多地支持所需的主体格式(目前仅支持
json
和formdata
); - 支持(以 markdown 格式)生成文档,并带有响应示例(如果有)(#6);
- 可能还有其他转换格式(如 httpie 或类似的东西);
- 更好的日志记录;
- 90%+ 测试覆盖率,phpcs,psalm 等;
- 网络版本。
安装和升级
composer global r axenov/pm-convert # install
composer global u axenov/pm-convert # upgrade
确保您的 ~/.config/composer/vendor/bin
在 $PATH
环境中
echo $PATH | grep --color=auto 'composer'
# if not then execute this command and add it into ~/.profile:
export PATH="$PATH:~/.config/composer/vendor/bin"
用法
$ pm-convert --help
Postman collection converter
Usage:
./pm-convert -f|-d PATH -o OUTPUT_PATH [ARGUMENTS] [FORMATS]
php pm-convert -f|-d PATH -o OUTPUT_PATH [ARGUMENTS] [FORMATS]
composer pm-convert -f|-d PATH -o OUTPUT_PATH [ARGUMENTS] [FORMATS]
./vendor/bin/pm-convert -f|-d PATH -o OUTPUT_PATH [ARGUMENTS] [FORMATS]
Possible ARGUMENTS:
-f, --file - a PATH to a single collection file to convert from
-d, --dir - a PATH to a directory with collections to convert from
-o, --output - a directory OUTPUT_PATH to put results in
-e, --env - use environment file with variables to replace in requests
--var "NAME=VALUE" - force replace specified env variable called NAME with custom VALUE
-p, --preserve - do not delete OUTPUT_PATH (if exists)
--dump - convert provided arguments into settings file in `pwd`
-h, --help - show this help message and exit
-v, --version - show version info and exit
If no ARGUMENTS passed then --help implied.
If both -f and -d are specified then only unique set of files from both arguments will be converted.
-f or -d are required to be specified at least once, but each may be specified multiple times.
PATH must be a valid path to readable json-file or directory.
OUTPUT_PATH must be a valid path to writeable directory.
If -o or -e was specified several times then only last one will be used.
Possible FORMATS:
--http - generate raw *.http files (default)
--curl - generate shell scripts with curl command
--wget - generate shell scripts with wget command
--v2.0 - convert from Postman Collection Schema v2.1 into v2.0
--v2.1 - convert from Postman Collection Schema v2.0 into v2.1
-a, --all - convert to all of formats listed above
If no FORMATS specified then --http implied.
Any of FORMATS can be specified at the same time or replaced by --all.
Example:
./pm-convert \
-f ~/dir1/first.postman_collection.json \
--directory ~/team \
--file ~/dir2/second.postman_collection.json \
--env ~/localhost.postman_environment.json \
-d ~/personal \
--var "myvar=some value" \
-o ~/postman_export \
--all
注意事项
pm-convert
执行的结果是一系列生成的文件。最有可能的是,它们将包含错误,例如未插值的{{variables}}
值(由于集合中缺失),错误的命令格式或带有主体的GET
。在使用之前,您必须检查任何生成的文件。- 确保每个(我的意思是 每个)集合(不是集合文件)、其文件夹和/或请求具有唯一的名称。如果不是,您可以在 Postman 中重命名它们,或将具有类似名称的集合转换为不同的目录。否则,任何生成的文件都可能被另一个文件意外覆盖。
关于变量插值的说明
- 您可以使用 -e 来指定替换请求中变量的位置。
- 您可以使用一个或多个 --var 来替换特定的环境变量为您自己的值。
- 正确的语法是
--var "NAME=VALUE"
。NAME
可以在花括号中,如{{NAME}}
。 - 由于 -e 是可选的,所以一系列的
--var
将模拟一个环境。而且,您提供的环境文件中是否有--var
并不重要。 - 即使您没有提供 -e 和/或
--var
,任何变量也可能仍然被集合(如果有的话)覆盖,所以最后的优先级最高。
关于 Postman 模式之间的转换的说明
您可以使用--v2.1
将v2.1转换为v2.1(这不是打字错误)。同样适用于--v2.0
。
有一种情况,当集合通过Postman API导出时。在这种情况下,集合本身位于单个根对象中,称为collection
,如下所示:
{
"collection": {
// your actual collection here
}
}
因此,pm-convert将仅将实际数据提升到顶层并写入磁盘。
设置文件
您可能希望一次性指定参数,然后在每次使用时无需显式定义pm-convert
的参数。
这可以通过几种方式实现。
-
将此文件保存为项目目录中的
pm-convert-settings.json
。{ "directories": [], "files": [], "environment": "", "output": "", "preserveOutput": false, "formats": [], "vars": {} }
填写您需要的值。
-
在命令末尾添加
--dump
,您提供的所有参数都将转换为并保存为当前工作目录中的pm-convert-settings.json
。例如,在--help
文件中将包含此信息:{ "directories": [ "~/team", "~/personal" ], "files": [ "~/dir1/first.postman_collection.json", "~/dir2/second.postman_collection.json" ], "environment": "~/localhost.postman_environment.json", "output": "~/postman_export", "preserveOutput": false, "formats": [ "http", "curl", "wget", "v2.0", "v2.1" ], "vars": { "myvar": "some value" } }
如果设置文件已存在,则您将被询问要做什么:覆盖它、备份它或退出。
一旦设置文件保存在当前目录中,您只需运行pm-convert
即可。设置将像通过显式传递参数一样应用。
如何实现新的格式
- 在
./src/Converters
中创建新的命名空间,并按您选择的格式命名它。 - 创建两个类,用于转换器和请求对象,分别扩展
Converters\Abstract\Abstract{Converter, Request}
。 - 根据您要实现的格式更改新请求类中的常量值。
- 在
Converters\ConvertFormat
中添加您的转换器类名称。 - 在转换器中编写您自己的逻辑,编写新方法并重写抽象方法。
许可证
您可以根据MIT许可证使用、分享和开发此项目。
Postman是Postman, Inc.的受保护的合法商标。
免责声明
我不是以任何方式与Postman, Inc.有关联。
我只是一个被迫使用这个javascripted gigachad-shitmonster的后端开发者。
因此,这个项目的目标是
- 将数据和其同步置于自己的透明控制之下;
- 轻松迁移到更内存容忍且更有生产力的东西,更容易使用且免费;
- 摆脱供应商锁定,对团队施加严格的限制,并且不必为重而笨重的WYSIWYG支付巨额费用;
- 给您这些机会。