Coder Social home page Coder Social logo

warmuuh / milkman Goto Github PK

View Code? Open in Web Editor NEW
1.1K 12.0 67.0 5.87 MB

An Extensible Request/Response Workbench

License: MIT License

Java 91.74% Batchfile 0.13% Shell 0.45% JavaScript 5.82% SCSS 1.87%
hacktoberfest grpc rest http testing milkman-plugins

milkman's Introduction

Nightly Donate Gitter

Milkman Logo Milkman - An Extensible Request/Response Workbench

Milkman is heavily inspired by Postman. But I got sick of all those electron-based applications that need ages and loads of memory to start up. Therefore i created a JavaFx-based workbench for crafting requests / responses. It is not limited to e.g. http (or more specifically rest) requests. Due to nearly everything being a plugin, other things are possible, like database-requests or GRPC, GraphQl, etc...

โ—โ— Update on Insomnia

Hello Insomnia Users ๐Ÿ‘‹. Recently, a way to import insomnia data was added due to the latest changes on insomnia. Rest assured that the restriction of having an account in Postman (and now, Insomnia) was one of the main reasons to create Milkman and such a thing will never ever happen.
The importer will be available in version 5.7.0 but is already implemented in the nightly release.

Download

  • Download latest version in Release Section. Or download Nightly version for latest changes.
  • Download plugin archive as well, if you want to use any of those plugins.
  • unzip everything into the same directory and start application via either the supplied start-scripts or milkman.exe
    • starting with version 5.8.0, you can install downloaded plugins via plugin management

Install via Chocolatey (Win)

  • To install just Milkman run Choco install milkman
  • To install a plugin run Choco install milkman-<plugin name> ex. Choco install milkman-explore
  • Install Milkman and all plugins available run Choco install milkman-plugins
  • Milkman will be installed under C:\tools\milkman.

Install via Homebrew (MacOs)

  • To install, run brew install --cask milkman. All plugins are included.
  • To update, run brew upgrade --cask

Changes

latest changes can be seen in the Changelog

FAQ

some resolved issues and FAQs are available in the wiki.

Features

  • Everything is a plugin: Request-types (e.g. Http Request), request-aspects (e.g. Headers, Body, etc), editors for request aspects (e.g. table-based editors for headers), importers, whatever it is, you can extend it. The core application only handles Workspaces with Environments, Collections, Requests and their aspects.
  • Http Request Plugin: Several plugins are provided already that extend the core application to be a replacement for postman/insomnia. Crafting and Executing Http/Rest requests with json highlighting. Support Proxy-server configuration and SSE.
  • Grpc Plugin: support of Grpc Services, Server Reflection and Streaming
  • Test Runner: run several requests as separate test-scenario
  • JavaFX Application: as in: fast (compared to electron at least :D) and skinn-able (you can extend milkman with your own themes using simple CSS).
  • Commandline Interface: there is a command line interface for Milkman which allows to edit/execute requests on your command line.
  • Slack Command: you can use /milkman <privatebin-url> in slack to share requests in a better way. More Info.
  • Some more details of the core application features, such as hotkeys etc.

Existing Plugins:

Note: see respective plugin folder for more details

Http Request Plugin: (included in main distribution)

The Http request plugin packaged with the release contains all means to do http request as well as import collections, environments or dumps from postman or insomnia. To migrate from postman, just export a dump-file from postman and import it by pasting its content into the Postman (v2.1) Dump-Importer.
To migrate from insomnia, see docs. The Http Request Plugin also comes with Proxy-support. Some proxies require credentials and support for supplying BASIC proxy credentials is built into the plugin. See Options-page to activate that as it is off by default. Additionally, the plugin supports chunked responses, enabling testing of Server-sent events (SSE).

Simple Graphql Plugin to craft GraphQL requests. No Auto-complete or schema valiadtion included.

Grpc plugin with server-reflection support and streaming-support. Can also query via proto-defintion.

This plugin introduces SQL capability to milkman. You can query SQL databases via milkman as well, using JDBC drivers.

Allows to execute CQL queries for given cassandra databases.

This plugin allows to synchronize workspaces via Git (using Differential Synchronization). Teams can use this plugin to have a shared workspace that synchronizes between members.

This plugin extends Rest-responses by adding an Explore-Tab where you can use JMesPath queries against a JSON response.

Extends requests by executing a script after request execution. This allows to e.g. set environment variables based on results of json.

Adds capability to share requests via PrivateBin, including Burn After Reading feature

This is a sample plugin that allows to add arbitrary description to every request. Serves as a starting point for learning to extend milkman.

A testrunner plugin that allows to run multiple requests in sequence and verify the results

An OAuth Plugin for managing oauth credentials and transparent refreshing of tokens

A websocket plugin for interacting with websocket endpoints

A Socket.IO plugin for interacting with Socket.IO endpoints

A NoSql plugin for interacting with all kinds of NoSql Databases

Showcase

Milkman White

Milkman Dark

Additional themes available here: https://github.com/lopitz/milkman-themes

Plugins

No client fits all, so you are encouraged to write your own plugins to e.g. add headers that are necessary for your internal service structures or add importers for internal service registries.

A sample plugin was provided that extends all requests with a Note tab so you can add some description to any kind of requests.

More details about developing plugins can be found in the plugin development guide.

Installation: all plugins are to be copied to the /plugins folder (or via plugin-management, since version 5.8.0)

Changes

latest changes can be seen in the Changelog

milkman's People

Contributors

0xflotus avatar actions-user avatar dependabot[bot] avatar digitalcoyote avatar kawarimidoll avatar linuxsuren avatar lopitz avatar mapuo avatar muminc avatar pauljackals avatar uri-shtand avatar warmuuh avatar yofab avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

milkman's Issues

Missing .dektop file for linux

Being able to search for milkman in the gnome overview is nice. You can add a shortcut by creating a .desktop file and install it to either /usr/share/applications or $HOME/.local/share/applications.

The way i solved it was by unpacking milkman to
$HOME/.local/opt and writing the file shown below to $HOME/.local/share/applications/Milkman.desktop:

[Desktop Entry]
Name=Milkman
Exec=/home/pbsds/.local/opt/milkman-3.2.0/milkman.sh
Icon=/home/pbsds/.local/opt/milkman-3.2.0/milk-bottle.png
Terminal=false
Type=Application
Keywords=milkman;postman;rest;http;sql;jdbc;java;

Results:
Screenshot from 2019-07-09 14-12-11

(i did download the milk-bottle.png image to make this work)

I don't know whether the .desktop file supports environment variables or not, but adding a script or something to generate this file (to fill in the home path) or at least providing a template .desktop file would be nice.

Send request on Enter

When I change the url I press the enter key and expect to send a request, but it doesn't :(

App does not show up in Linux

Just tested 3.7.0 on Fedora 31 (Gnome 3). No app window showed up. Got this in console:

$ ./milkman.sh 
11:51:42.658 [main] INFO milkman.MilkmanApplication - VM Startup time: 322 ms
java.lang.UnsupportedOperationException: Taskbar API is not supported on the current platform
	at java.desktop/java.awt.Taskbar.getTaskbar(Taskbar.java:216)
	at milkman.ui.main.MainWindow.setIcon(MainWindow.java:98)
	at milkman.ui.main.MainWindow.start(MainWindow.java:62)
	at milkman.MilkmanApplication.start(MilkmanApplication.java:43)
	at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846)
	at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455)
	at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
	at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
	at javafx.graphics/com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
	at javafx.graphics/com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop$11(GtkApplication.java:277)
	at java.base/java.lang.Thread.run(Thread.java:834)
11:51:43.123 [JavaFX Application Thread] INFO milkman.ctrl.WorkspaceController - Diplaying request: RequestContainer(name=New Request)
11:51:43.370 [JavaFX Application Thread] INFO milkman.ui.main.WorkingAreaComponent - tab repainted
11:51:43.370 [JavaFX Application Thread] INFO milkman.ui.main.WorkingAreaComponent - request area refreshed
11:51:43.993 [JavaFX Application Thread] INFO milkman.MilkmanApplication - App Initialization time: 1333 ms
11:51:44.167 [Thread-5] INFO milkman.cds.AppCdsGenerator - AppCds archive is up-to-date and usable. Not regenerating.

requests should be sortable

requests should be sortable via drag & drop, also should be movable between collections.
The reason for not making collections drag/dropable is that this would interfere with auto-sorting (starred, a-z), which i prefer over manual sorting (also, this is how postman does it)

Grpc plugin

Now with http/2 support coming in 3.7.0, supporting grpc should be easier.

improve dark theme

The dark theme is usable at best. It can be improved. Some dropdowns still render in white, some fonts are not readable (black on darkgrey). the overall look&feel of this theme could probably be improved as well.
This mainly needs changes in the CSS file

issues with https calls

Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

Explore plugin requires Notes and Scripting plugins

Version: 3.2.0
OS: Windows 10
Issue: After installing the application with all plugins, I played around a little bit, but was unable to get HTTP requests to work (still looking into that). I tried removing most of the plugins, leaving the Rest and Explore plugins. After doing that and restarting the application, Milkman would flash on screen and then quickly exit. Looking into the logs (dump below), it seems that the Explore plugin is dependent upon Notes plugin. After re-adding that plugin, I got a similar dump for missing class ScriptingAspect.

It's not clear from documentation whether this dependency is intentional or not. If nothing else, an error popup before exit could be beneficial.

Log Dump:

2019-07-09 08:08:46,018 ERROR [JavaFX Application Thread] o.d.n.m.JacksonFacade [JacksonFacade.java:136] Error while converting document to object 
java.lang.IllegalArgumentException: Invalid type id 'milkman.plugin.note.NotesAspect' (for id type 'Id.class'): no such class found (through reference chain: milkman.domain.Workspace["openRequests"]->java.util.ArrayList[0]->milkman.ui.plugin.rest.domain.RestRequestContainer["aspects"]->java.util.ArrayList[3])
	at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:3512)
	at com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:3431)
	at org.dizitart.no2.mapper.JacksonFacade.asObject(JacksonFacade.java:134)
	at org.dizitart.no2.mapper.GenericMapper.asObjectInternal(GenericMapper.java:53)
	at org.dizitart.no2.mapper.AbstractMapper.asObject(AbstractMapper.java:76)
	at org.dizitart.no2.objects.ObjectCursor$ObjectCursorIterator.next(ObjectCursor.java:110)
	at milkman.persistence.PersistenceManager.loadWorkspaceNames(PersistenceManager.java:50)
	at milkman.ctrl.ApplicationController.initApplication(ApplicationController.java:62)
	at milkman.MilkmanApplication.start(MilkmanApplication.java:27)
	at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846)
	at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455)
	at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
	at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
	at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
	at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
	at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Invalid type id 'milkman.plugin.note.NotesAspect' (for id type 'Id.class'): no such class found (through reference chain: milkman.domain.Workspace["openRequests"]->java.util.ArrayList[0]->milkman.ui.plugin.rest.domain.RestRequestContainer["aspects"]->java.util.ArrayList[3])
	at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:339)
	at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:311)
	at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:298)
	at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:249)
	at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:26)
	at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:490)
	at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:95)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:260)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeOther(BeanDeserializer.java:163)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:135)
	at com.fasterxml.jackson.databind.jsontype.impl.AsPropertyTypeDeserializer._deserializeTypedForId(AsPropertyTypeDeserializer.java:120)
	at com.fasterxml.jackson.databind.jsontype.impl.AsPropertyTypeDeserializer.deserializeTypedFromObject(AsPropertyTypeDeserializer.java:91)
	at com.fasterxml.jackson.databind.deser.AbstractDeserializer.deserializeWithType(AbstractDeserializer.java:142)
	at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:279)
	at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:249)
	at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:26)
	at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:490)
	at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:95)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:260)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:125)
	at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:3507)
	... 17 common frames omitted
Caused by: java.lang.IllegalArgumentException: Invalid type id 'milkman.plugin.note.NotesAspect' (for id type 'Id.class'): no such class found
	at com.fasterxml.jackson.databind.jsontype.impl.ClassNameIdResolver._typeFromId(ClassNameIdResolver.java:66)
	at com.fasterxml.jackson.databind.jsontype.impl.ClassNameIdResolver.typeFromId(ClassNameIdResolver.java:48)
	at com.fasterxml.jackson.databind.jsontype.impl.TypeDeserializerBase._findDeserializer(TypeDeserializerBase.java:156)
	at com.fasterxml.jackson.databind.jsontype.impl.AsPropertyTypeDeserializer._deserializeTypedForId(AsPropertyTypeDeserializer.java:106)
	at com.fasterxml.jackson.databind.jsontype.impl.AsPropertyTypeDeserializer.deserializeTypedFromObject(AsPropertyTypeDeserializer.java:91)
	at com.fasterxml.jackson.databind.deser.AbstractDeserializer.deserializeWithType(AbstractDeserializer.java:142)
	at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:279)
	... 35 common frames omitted

milkman.sh has incorrect line endings for Unix

Problem:

unable to run the milkman.sh script.

Steps to Replicate:

# pull down dist
wget https://github.com/warmuuh/milkman/releases/download/3.2.0/milkman-dist-linux64-bin.zip
# unzip it
unzip milkman-dist-linux64-bin.zip
cd milkman-dist-linux64-bin/
# make milkman.sh executable
chmod +x milkman.sh
# try and run it!
./milkman.sh

you get the following error:

$ bash: ./milkman.sh: /bin/sh^M: bad interpreter: No such file or directory

WORKAROUND

Replace Windows line ending with Unix line endings and then run:

$ sed -i -e 's/\r$//' milkman.sh
$ ./milkman.sh

SSLHandshakeException for TLS10

Hi all,

I'm trying to do some REST calls and I'm getting

javax.net.ssl.SSLHandshakeException: The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12]
	at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:131)
	at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117)
	at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:308)
	at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:264)
	at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:255)
	at java.base/sun.security.ssl.ServerHello$ServerHelloConsumer.onServerHello(ServerHello.java:968)
	at java.base/sun.security.ssl.ServerHello$ServerHelloConsumer.consume(ServerHello.java:890)
	at java.base/sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:392)
	at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:448)
	at java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run(SSLEngineImpl.java:1065)
	at java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run(SSLEngineImpl.java:1052)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask.run(SSLEngineImpl.java:999)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1540)
	at java.net.http/jdk.internal.net.http.common.SSLFlowDelegate.lambda$executeTasks$3(SSLFlowDelegate.java:1059)
	at java.net.http/jdk.internal.net.http.HttpClientImpl$DelegatingExecutor.execute(HttpClientImpl.java:153)
	at java.net.http/jdk.internal.net.http.common.SSLFlowDelegate.executeTasks(SSLFlowDelegate.java:1054)
	at java.net.http/jdk.internal.net.http.common.SSLFlowDelegate.doHandshake(SSLFlowDelegate.java:1020)
	at java.net.http/jdk.internal.net.http.common.SSLFlowDelegate$Reader.processData(SSLFlowDelegate.java:437)
	at java.net.http/jdk.internal.net.http.common.SSLFlowDelegate$Reader$ReaderDownstreamPusher.run(SSLFlowDelegate.java:263)
	at java.net.http/jdk.internal.net.http.common.SequentialScheduler$SynchronizedRestartableTask.run(SequentialScheduler.java:175)
	at java.net.http/jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:147)
	at java.net.http/jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(SequentialScheduler.java:198)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:834)

I have added

-Djdk.tls.client.protocols="SSLv3,TLSv1,TLSv1.1,TLSv1.2" ^
	-Dhttps.protocols="TLSv1,TLSv1.1" ^
	-Djavax.net.debug=all ^
	-Djdk.tls.disabledAlgorithms="" ^

to milkman.bat file (on Windows) but to no avail.

Seems like in JavaRequestProcessor.java
builder.useSystemProperties()
must be called. (according to SO)

Thank you.

reenable button effects

for testing performance improvements, any ripple effects where disabled
this leads to no feedback on clikcing buttons.
has to be re-enabled, at least for buttons

Support question regarding TLS 1.2 handshake

I'm having trouble getting past the TLS handshake to my target, though cURL has no issue. Milkman under Windows has a pop-up reporting...

javax.net.ssl.SSLHandshakeException: Remote host terminated the handshake

...while the target has a log reporting a handshake timeout.

Milkman under Linux has java logs reporting...

07:40:28.769 [JavaFX Application Thread] INFO milkman.ctrl.WorkspaceController - Received response
07:40:28.822 [elastic-2] ERROR milkman.ui.plugin.rest.ResponseBodyTabController - Received Error
java.security.cert.CertificateException: No subject alternative names present

So I'm guessing an alternative name is required in the certificate for Milkman to properly connect?

Grpc Demo Gif

to showcase bi-streaming in Grpc, simple ping-pong

Requests don't send after importing from PostMan

Version: 3.2.0
OS: Windows 10
Steps to reproduce:

  • Start with fresh MilkMan instance
  • Send GET request to https://google.com
    • This works
  • Import PostMan file
  • Run request again
    • The UI does not indicate that the request has been made

I've included an anonymized dump file that narrows it down to the problem. For whatever reason, PostMan included two environments with the same name, and that causes this issue. In the PostMan UI, I do not see both environments, just the second one.

PostMan dump:

{
	"version": 1,
	"collections": [
	],
	"environments": [
		{
			"id": "28dc01f2-a653-4ce2-a95f-865322c92b12",
			"name": "My Workspace - globals",
			"values": [
				{
					"key": "anonymized",
					"value": "https://example.org",
					"description": "",
					"enabled": true
				}
			]
		},
		{
			"id": "60152d96-b54b-43bb-aece-e7bfdd14ec63",
			"name": "My Workspace - globals",
			"values": [
				{
					"key": "anonymized",
					"value": "https://example.org",
					"description": "",
					"enabled": true
				},
				{
					"key": "anonymized2",
					"value": "https://example2.org",
					"description": "",
					"enabled": true
				},
				{
					"key": "anonymized3",
					"value": "https://example3.org",
					"description": "",
					"enabled": true
				}
			]
		}
	],
	"headerPresets": [],
	"globals": []
}

protoc-jar stuff

Hi there, somehow I noticed your usage of protoc-jar (I'm the author)
5e45f7e

Note that an API exists that allows capturing stdout/stderr: public static int runProtoc(String[] args, OutputStream out, OutputStream err)

And there is a built-in option to include the well-known types (--include_std_types)

Also, I saw something about grpc reflection -- FYI there is a separate project to make life easier with protobuf reflection, check it out perhaps:
https://github.com/os72/protobuf-dynamic

Cheers!

choco install milkman-grpc isn't found

The GRPC plugin page doesn't indicate what the chocolatey name is.

The output from choco is:

[ADMIN]: C:\Program Files\PowerToys> choco install milkman-grpc
Chocolatey v0.10.15
Installing the following packages:
milkman-grpc
By installing you accept licenses for the packages.
milkman-grpc not installed. The package was not found with the source(s) listed.
 Source(s): 'https://chocolatey.org/api/v2/'
 NOTE: When you specify explicit sources, it overrides default sources.
If the package version is a prerelease and you didn't specify `--pre`,
 the package may not be found.
Please see https://chocolatey.org/docs/troubleshooting for more
 assistance.

Chocolatey installed 0/1 packages. 1 packages failed.
 See the log for details (C:\ProgramData\chocolatey\logs\chocolatey.log).

Failures
 - milkman-grpc - milkman-grpc not installed. The package was not found with the source(s) listed.
 Source(s): 'https://chocolatey.org/api/v2/'
 NOTE: When you specify explicit sources, it overrides default sources.
If the package version is a prerelease and you didn't specify `--pre`,
 the package may not be found.
Please see https://chocolatey.org/docs/troubleshooting for more
 assistance.

Feature request: export as OpenAPI draft specification.

First, thanks for Milkman!

A nice-to-have for me is exporting a Collection as an OpenAPI specification. Obviously there are a few issues that might might need to be resolved, such as providing object names for a request body in JSON format and response JSON objects. Without names, these objects would just take the name of the request name.

This would be a big help in developing an OpenAPI specification based on a Milkman test suite, even if a complete specification might need some hand tweaking.

https://swagger.io/specification/

Add setting for following redirects

Postman has a setting that determines whether redirect responses should be followed. Sometimes I just want to see that the server returned a 30*, I don't need to follow it.

Websocket Plugin

A nice addition to milkman would be a websocket plugin. With support of streaming/async responses starting with Milkman 4.0, this would be achievable. Also, having a websocket UI next to normal requests improves productivity by avoiding context switches.

The UI would be similar to the existing GRPC plugin, allowing to send and recieve multiple request/responses.

Non-Goals: a way to manually send responses based on async chunks sent by the server (i.e. a PONG send by client manually, but only, if the server sent PING before).

GRPC calls dont work on macos

apparently, there is something windows-specific going on:

me.dinowernli.grpc.polyglot.protobuf.ProtocInvoker$ProtocInvocationException: Unable to execute protoc binary
	at me.dinowernli.grpc.polyglot.protobuf.ProtocInvoker.invokeBinary(ProtocInvoker.java:110)
	at me.dinowernli.grpc.polyglot.protobuf.ProtocInvoker.invoke(ProtocInvoker.java:62)
	at milkman.plugin.grpc.processor.GrpcRequestProcessor.compileProtoSchema(GrpcRequestProcessor.java:135)
	at milkman.plugin.grpc.processor.GrpcRequestProcessor.makeRequest(GrpcRequestProcessor.java:82)
	at milkman.plugin.grpc.processor.GrpcRequestProcessor.executeRequest(GrpcRequestProcessor.java:51)
	at milkman.plugin.grpc.GrpcPlugin.executeRequestAsync(GrpcPlugin.java:81)
	at milkman.ctrl.RequestExecutor$1.call(RequestExecutor.java:43)
	at milkman.ctrl.RequestExecutor$1.call(RequestExecutor.java:29)
	at javafx.graphics/javafx.concurrent.Task$TaskCallable.call(Task.java:1425)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at javafx.graphics/javafx.concurrent.Service.lambda$executeTask$6(Service.java:725)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at javafx.graphics/javafx.concurrent.Service.lambda$executeTask$7(Service.java:724)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.io.IOException: Cannot run program "/Users/pmucha/protocjar14160495236028116982/bin/protoc.exe": error=316, posix_spawn failed
	at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1128)
	at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1071)
	at com.github.os72.protocjar.Protoc.runProtoc(Protoc.java:117)
	at com.github.os72.protocjar.Protoc.runProtoc(Protoc.java:78)
	at me.dinowernli.grpc.polyglot.protobuf.ProtocInvoker.invokeBinary(ProtocInvoker.java:107)
	... 15 common frames omitted
Caused by: java.io.IOException: error=316, posix_spawn failed
	at java.base/java.lang.ProcessImpl.forkAndExec(Native Method)
	at java.base/java.lang.ProcessImpl.<init>(ProcessImpl.java:340)
	at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:271)
	at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1107)
	... 19 common frames omitted

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.