api-tester-cli 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.md +74 -0
- data/bin/api-tester +94 -0
- data/lib/api_tester/client.rb +49 -0
- data/lib/api_tester/helper.rb +11 -0
- data/lib/api_tester/request.rb +28 -0
- data/lib/api_tester/response.rb +62 -0
- data/lib/api_tester.rb +8 -0
- metadata +108 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 155299a42034d93ed03164056d6ca453bcf3e43acc282ddb015a3b14f4e51b7c
|
4
|
+
data.tar.gz: 45e106438c46b807e9493f073f7890779de95f37a8391eb2a390b37c70f6e695
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 915563f0c5af3a185729d25bce93d418e76c2842de9412eb24f1cc62fe89f6cbd7e23259b56a75b10bfff026fe0729c1356bc858f23ec9dc01103a193a21ac5b
|
7
|
+
data.tar.gz: 3dc5c338d28ede087a7077978e17f8321e680361258c38c83cfe6b69824aba42fc80765a9289acd57d923d0f3867dbe446049423fadc0751f4e65561fb33d654
|
data/README.md
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
|
2
|
+
# API Tester CLI Tool
|
3
|
+
A simple command-line tool to test REST APIs. This tool allows you to interactively input API details or provide them as command-line arguments for quick testing.
|
4
|
+
|
5
|
+
## Features
|
6
|
+
|
7
|
+
- Supports HTTP methods (GET, POST, PUT, DELETE)
|
8
|
+
- Allows adding custom headers
|
9
|
+
- Supports JSON body for requests
|
10
|
+
- Bearer token authentication
|
11
|
+
- Interactive mode for beginners
|
12
|
+
- Command-line mode for advanced users
|
13
|
+
- Colored and formatted output for better readability
|
14
|
+
|
15
|
+
## Installation
|
16
|
+
|
17
|
+
1. Clone the repository:
|
18
|
+
```bash
|
19
|
+
git clone https://github.com/bhavyansh001/api-tester.git
|
20
|
+
```
|
21
|
+
2. Install dependencies:
|
22
|
+
```bash
|
23
|
+
bundle install
|
24
|
+
```
|
25
|
+
3. Run the CLI tool:
|
26
|
+
```bash
|
27
|
+
cd api-tester
|
28
|
+
chmod +x bin/api-tester
|
29
|
+
```
|
30
|
+
## Usage
|
31
|
+
|
32
|
+
1. Interactive Mode
|
33
|
+
Run the tool without any arguments, and it will prompt you for the necessary information interactively.
|
34
|
+
```bash
|
35
|
+
bin/api-tester
|
36
|
+
```
|
37
|
+
You will be asked to provide the following:
|
38
|
+
- URL
|
39
|
+
- HTTP Method (GET, POST, PUT, DELETE)
|
40
|
+
- Body (as JSON)
|
41
|
+
- Bearer Token (if needed)
|
42
|
+
- Custom Headers (optional)
|
43
|
+
|
44
|
+
2. Command-Line Mode
|
45
|
+
You can also provide arguments directly to make the process faster.
|
46
|
+
```bash
|
47
|
+
bin/api-tester -u https://your-api.com/login -m POST -H '{"Content-Type": "application/json"}' -b '{"email": "user@example.com", "password": "password123"}' -t 'your_bearer_token'
|
48
|
+
```
|
49
|
+
Options:
|
50
|
+
- -u, --url : The API URL.
|
51
|
+
- -m, --method : The HTTP method (GET, POST, PUT, DELETE).
|
52
|
+
- -b, --body : The request body as JSON.
|
53
|
+
- -H, --headers : Custom headers as JSON.
|
54
|
+
- -t, --token : Bearer token for authorization.
|
55
|
+
|
56
|
+
3. Response
|
57
|
+
The response from the server is displayed with colored status codes, headers in table format, and pretty-printed JSON body.
|
58
|
+
|
59
|
+
## Logging
|
60
|
+
|
61
|
+
The tool provides colored logging to enhance visibility. Output includes details about the request, response status, and any errors encountered.
|
62
|
+
|
63
|
+
## Best Practices
|
64
|
+
|
65
|
+
Respect the API's terms of service and rate limits.
|
66
|
+
Ensure you have permission to test authenticated endpoints.
|
67
|
+
Use caution with sensitive information when testing.
|
68
|
+
|
69
|
+
## Contributing
|
70
|
+
|
71
|
+
Contributions are welcome! Report bugs and submit pull requests on GitHub at https://github.com/bhavyansh001/api_tester_cli. Please adhere to the Contributor Covenant code of conduct.
|
72
|
+
|
73
|
+
## License
|
74
|
+
api_tester_cli is released under the MIT License. See the LICENSE file for details.
|
data/bin/api-tester
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
require 'optparse'
|
5
|
+
require 'colorize'
|
6
|
+
require_relative '../lib/api_tester'
|
7
|
+
|
8
|
+
def send_request(options)
|
9
|
+
# Create and send request using options
|
10
|
+
request = ApiTester::Request.new
|
11
|
+
request.set_method(options[:method])
|
12
|
+
request.set_headers(options[:headers])
|
13
|
+
request.set_body(options[:body]) if options[:body]
|
14
|
+
request.set_auth_token(options[:token]) if options[:token]
|
15
|
+
|
16
|
+
client = ApiTester::Client.new(options[:url], request.headers, request.method, request.body, request.token)
|
17
|
+
|
18
|
+
# Display formatted request info
|
19
|
+
puts "\nSending request to: #{options[:url]}".green
|
20
|
+
puts "Method: #{options[:method]}".green
|
21
|
+
puts "Headers: #{options[:headers]}".green
|
22
|
+
puts "Body: #{options[:body].to_json}" if options[:body]
|
23
|
+
|
24
|
+
# Send the request and display the response
|
25
|
+
response = client.send_request
|
26
|
+
response.display
|
27
|
+
end
|
28
|
+
|
29
|
+
options = {}
|
30
|
+
OptionParser.new do |opts|
|
31
|
+
opts.banner = "Usage: api-tester [options]"
|
32
|
+
|
33
|
+
opts.on("-u", "--url URL", "API URL") { |v| options[:url] = v }
|
34
|
+
opts.on("-m", "--method METHOD", "HTTP method") { |v| options[:method] = v.upcase }
|
35
|
+
opts.on("-b", "--body BODY", "Request body as JSON") { |v| options[:body] = JSON.parse(v) }
|
36
|
+
opts.on("-H", "--headers HEADERS", "Request headers as JSON") { |v| options[:headers] = JSON.parse(v) }
|
37
|
+
opts.on("-t", "--token TOKEN", "Bearer token for authorization") { |v| options[:token] = v }
|
38
|
+
end.parse!
|
39
|
+
|
40
|
+
# If URL is provided via arguments (first case)
|
41
|
+
if options[:url]
|
42
|
+
send_request(options)
|
43
|
+
|
44
|
+
# If no URL provided, enter interactive mode (second case)
|
45
|
+
else
|
46
|
+
puts "Welcome to the API Tester!".light_blue
|
47
|
+
puts "Please provide the following details:"
|
48
|
+
|
49
|
+
print "Base URL (e.g., https://example.com/api/v1): ".yellow
|
50
|
+
base_url = gets.chomp
|
51
|
+
|
52
|
+
headers = { "Content-Type" => "application/json" }
|
53
|
+
print "Do you have any additional headers as JSON? (y/n): ".yellow
|
54
|
+
if gets.chomp.downcase == 'y'
|
55
|
+
print "Enter headers as JSON: ".yellow
|
56
|
+
additional_headers = JSON.parse(gets.chomp)
|
57
|
+
headers.merge!(additional_headers)
|
58
|
+
end
|
59
|
+
options[:headers] = headers
|
60
|
+
|
61
|
+
begin
|
62
|
+
loop do
|
63
|
+
print "Endpoint (e.g., /login): ".yellow
|
64
|
+
endpoint = gets.chomp
|
65
|
+
options[:url] = "#{base_url}#{endpoint}"
|
66
|
+
|
67
|
+
print "HTTP Method (GET, POST, PUT, DELETE): ".yellow
|
68
|
+
options[:method] = gets.chomp.upcase
|
69
|
+
|
70
|
+
print "Do you have a request body? (y/n): ".yellow
|
71
|
+
if gets.chomp.downcase == 'y'
|
72
|
+
print "Enter the body as JSON: ".yellow
|
73
|
+
options[:body] = JSON.parse(gets.chomp)
|
74
|
+
else
|
75
|
+
options[:body] = nil
|
76
|
+
end
|
77
|
+
|
78
|
+
print "Do you have a Bearer Token? (y/n): ".yellow
|
79
|
+
if gets.chomp.downcase == 'y'
|
80
|
+
print "Enter the Bearer Token: ".yellow
|
81
|
+
options[:token] = gets.chomp
|
82
|
+
else
|
83
|
+
options[:token] = nil
|
84
|
+
end
|
85
|
+
|
86
|
+
# Send request in loop
|
87
|
+
send_request(options)
|
88
|
+
|
89
|
+
puts "\nPress Ctrl+C to exit or continue with a new request.".light_blue
|
90
|
+
end
|
91
|
+
rescue Interrupt
|
92
|
+
puts "\nExiting API Tester. Goodbye!".red
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'uri'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
module ApiTester
|
6
|
+
class Client
|
7
|
+
def initialize(url, headers = {}, method = 'GET', body = nil, token = nil)
|
8
|
+
@uri = URI.parse(url)
|
9
|
+
@headers = headers
|
10
|
+
@method = method
|
11
|
+
@body = body
|
12
|
+
@token = token
|
13
|
+
end
|
14
|
+
|
15
|
+
def send_request
|
16
|
+
http = Net::HTTP.new(@uri.host, @uri.port)
|
17
|
+
http.use_ssl = @uri.scheme == 'https' # Enable SSL for HTTPS
|
18
|
+
|
19
|
+
request = build_request
|
20
|
+
add_auth_token(request) if @token
|
21
|
+
|
22
|
+
response = http.request(request)
|
23
|
+
ApiTester::Response.new(response)
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def build_request
|
29
|
+
case @method.upcase
|
30
|
+
when 'POST'
|
31
|
+
req = Net::HTTP::Post.new(@uri, @headers)
|
32
|
+
req.body = @body.to_json if @body # Convert body to JSON string
|
33
|
+
req
|
34
|
+
when 'PUT'
|
35
|
+
req = Net::HTTP::Put.new(@uri, @headers)
|
36
|
+
req.body = @body.to_json if @body
|
37
|
+
req
|
38
|
+
when 'DELETE'
|
39
|
+
Net::HTTP::Delete.new(@uri, @headers)
|
40
|
+
else
|
41
|
+
Net::HTTP::Get.new(@uri, @headers)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def add_auth_token(request)
|
46
|
+
request['Authorization'] = "Bearer #{@token}"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module ApiTester
|
2
|
+
class Request
|
3
|
+
attr_reader :headers, :method, :body, :token
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
@headers = {}
|
7
|
+
@method = 'GET'
|
8
|
+
@body = nil
|
9
|
+
@token = nil
|
10
|
+
end
|
11
|
+
|
12
|
+
def set_headers(headers)
|
13
|
+
@headers = headers
|
14
|
+
end
|
15
|
+
|
16
|
+
def set_method(method)
|
17
|
+
@method = method.upcase
|
18
|
+
end
|
19
|
+
|
20
|
+
def set_body(body)
|
21
|
+
@body = body
|
22
|
+
end
|
23
|
+
|
24
|
+
def set_auth_token(token)
|
25
|
+
@token = token
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'terminal-table'
|
2
|
+
|
3
|
+
module ApiTester
|
4
|
+
class Response
|
5
|
+
def initialize(response)
|
6
|
+
@response = response
|
7
|
+
end
|
8
|
+
|
9
|
+
def display
|
10
|
+
# Display status with color
|
11
|
+
display_status
|
12
|
+
|
13
|
+
# Display headers in a table format
|
14
|
+
display_headers
|
15
|
+
|
16
|
+
# Display body
|
17
|
+
display_body
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def display_status
|
23
|
+
# Use green for 2xx, yellow for 3xx, red for 4xx and 5xx
|
24
|
+
status_code = @response.code.to_i
|
25
|
+
color = case status_code
|
26
|
+
when 200..299 then :green
|
27
|
+
when 300..399 then :yellow
|
28
|
+
else :red
|
29
|
+
end
|
30
|
+
|
31
|
+
puts "\nStatus: #{@response.code}".colorize(color)
|
32
|
+
end
|
33
|
+
|
34
|
+
def display_headers
|
35
|
+
puts "\nHeaders:".light_blue
|
36
|
+
|
37
|
+
# Using Terminal::Table to format headers
|
38
|
+
headers_table = Terminal::Table.new do |t|
|
39
|
+
t.headings = ['Header', 'Value']
|
40
|
+
@response.each_header { |key, value| t.add_row([key, value]) }
|
41
|
+
end
|
42
|
+
|
43
|
+
puts headers_table
|
44
|
+
end
|
45
|
+
|
46
|
+
def display_body
|
47
|
+
puts "\nBody:".light_blue
|
48
|
+
|
49
|
+
if json_response?
|
50
|
+
# Pretty-print JSON with color
|
51
|
+
puts JSON.pretty_generate(JSON.parse(@response.body)).colorize(:light_green)
|
52
|
+
else
|
53
|
+
# Print plain body for non-JSON responses
|
54
|
+
puts @response.body.colorize(:light_yellow)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def json_response?
|
59
|
+
@response['Content-Type'] && @response['Content-Type'].include?('application/json')
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
data/lib/api_tester.rb
ADDED
metadata
ADDED
@@ -0,0 +1,108 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: api-tester-cli
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Bhavyansh Yadav
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2024-09-11 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: json
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 2.7.2
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 2.7.2
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: colorize
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.1.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.1.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: terminal-table
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 3.0.2
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 3.0.2
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 3.13.0
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 3.13.0
|
69
|
+
description: This tool allows users to interactively test APIs via the command line.
|
70
|
+
email: bhavyansh001@gmail.com
|
71
|
+
executables:
|
72
|
+
- api-tester
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- README.md
|
77
|
+
- bin/api-tester
|
78
|
+
- lib/api_tester.rb
|
79
|
+
- lib/api_tester/client.rb
|
80
|
+
- lib/api_tester/helper.rb
|
81
|
+
- lib/api_tester/request.rb
|
82
|
+
- lib/api_tester/response.rb
|
83
|
+
homepage: https://rubygems.org/gems/api_tester
|
84
|
+
licenses:
|
85
|
+
- MIT
|
86
|
+
metadata:
|
87
|
+
source_code_uri: https://github.com/bhavyansh001/api_tester
|
88
|
+
issue_tracker_uri: https://github.com/bhavyansh001/api_tester/issues
|
89
|
+
post_install_message:
|
90
|
+
rdoc_options: []
|
91
|
+
require_paths:
|
92
|
+
- lib
|
93
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: 3.3.0
|
98
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
requirements: []
|
104
|
+
rubygems_version: 3.5.18
|
105
|
+
signing_key:
|
106
|
+
specification_version: 4
|
107
|
+
summary: A CLI tool to test APIs
|
108
|
+
test_files: []
|