Postman is a wondrous tool for backend developers. A friend. A single point of truth. Something that stays open alongside our code editor. However, using a graphical interface in a fast-moving work environment may not be productive. Most of us enjoy the most productivity with our keyboard, at our Terminal. So, why not bring Postman as a commandline interface? The project is pretty much in pre-release stage. Ideas/feedbacks are welcome!
Download for Linux, Mac, or Windows - and get started right away!
Usage: pcli [options] [command]
postman command-line interface
Options:
--version output the version number
-c, --collection <string> path to collection
-h, --headers <string> header for all requests
-v, --variables <string> variable for all requests
--help display help for command
Commands:
show [options] <resources...> show details of a resource
list [options] [resources...] list resources recursively
run [options] <resources...> runs a request
move [options] move a resource under another parent
rename [options] <resources...> rename a resource
reorder [options] <resources...> reorder a resource under the same parent
delete <resources...> remove a resource
help [command] display help for command
Download postman-cli for your platform: Linux, Mac, or Windows. Then let's download/export an example collection, which we can experiment with. You can copy and save this collection json in a file named collection.json
, or you can have your own postman collection json file.
This command prints the outline of a collection. The --depth
option controls the recursive depth, and it is Infinity
by default.
$ pcli -c collection.json list
$ pcli -c collection.json list --depth 2
col pcli example
fol users
req register
req login
req update
req list
req remove
fol orders
req checkout
req list
req remove
This command prints details of a folder, request, or example. Note that, for brevity, a "resource" refers to a folder, request, or example within a Postman collection. An example of pinpointing a nested resource is $ pcli show users register muadh
. Here, users
is a folder, register
is a request, and muadh
is an example. So, the command shows the details of the example named muadh
.
$ pcli -c collection.json show users register muadh
200 OK
{
url: { method: 'POST', path: '/users/register' },
headers: {
date: 'Sun, 17 Jul 2022 17:34:51 GMT',
server: 'Apache/2.4.48 (Ubuntu)',
'content-length': '271',
'keep-alive': 'timeout=5, max=100',
connection: 'Keep-Alive',
'content-type': 'text/html; charset=iso-8859-1'
},
body: {
user: { id: '7a96cbb8045a56d23dc1', fullName: 'Muadh Bin Jabaal' }
},
size: { body: 82, header: 210, total: 292 },
time: null
}
This command renames a folder, requst, or example. In this example, we're renaming the request login
to log-in
.
$ pcli -c collection.json rename users login --name log-in
This command moves a folder, request, or example within a collection. In this example, we're moving the request named register
from folder users
to folder orders
.
$ pcli -c collection.json move --from users register --to orders
This command deletes a folder, request, or example.
$ pcli -c collection.json delete users update
This command reorders a folder, request, or example by 1-based index.
$ pcli -c collection.json reorder users list --index 1
This command runs a HTTP request or example. Usually postman variables e.g. {{baseURL}}
or {{auth-token}}
are used in headers or URLs. Values for them can be provided through the --variables
option. Make sure you have an active backend server to process a HTTP request and provide a response. For the purposes of this demo, a simple static backend server is provided in test/server.ts
, which you can run by npm run test:backend
.
$ pcli -c collection.json run users register muadh
$ pcli --variables '{"server":"localhost:8080"}' -c collection.json run users register # running request, resolving {{server}}
$ pcli --variables '{"server":"localhost:8080"}' -c collection.json run users register muadh # running example, resolving {{server}}
200 OK
{
url: { method: 'POST', path: '/users/register' },
headers: {
date: 'Sun, 17 Jul 2022 17:34:51 GMT',
server: 'Apache/2.4.48 (Ubuntu)',
'content-length': '271',
'keep-alive': 'timeout=5, max=100',
connection: 'Keep-Alive',
'content-type': 'text/html; charset=iso-8859-1'
},
body: {
user: { id: '7a96cbb8045a56d23dc1', fullName: 'Muadh Bin Jabaal' }
},
size: { body: 82, header: 210, total: 292 },
time: null
}