foss42 / apidash

API Dash is a beautiful open-source cross-platform (macOS, Windows, Linux, Android & iOS) API Client built using Flutter which can help you easily create & customize your API requests, visually inspect responses and generate API integration code. A lightweight alternative to postman/insomnia.
https://apidash.dev
Apache License 2.0
1.7k stars 333 forks source link

Support for application/x-www-form-urlencoded Content-Type as body type formdata currently only supports multipart/form-data #337

Open AcousticDeveloper opened 8 months ago

AcousticDeveloper commented 8 months ago

Describe the bug/problem Currently whenever the formdata is selected as request body, the Content-Type header is set to multipart/form-data but this should be dependent upon whether there is a file being uploaded too or else it can be set to the default application/x-www-form-urlencoded.

Relevant References stackoverflow: application/x-www-form-urlencoded or multipart/form-data? baeldung: Difference Between form-data, x-www-form-urlencoded and raw in Postman

Steps to Reproduce the bug/problem Select POST request in the request method, select formdata as the request body, add only text fields as fields, and then we can either chck the codegen for languages where Content-Type is printed, or else we can print requestModel.requestBodyContentType.header inside codegen files to check the request header.

image

Expected behavior If there aren't any files uploaded i.e. all the fields are of text type and selected type is formdata, then the Content-Type should be set to application/x-www-form-urlencoded, and if there is at least one file in the form data, then the Content-Type should be multipart/form-data. As the default Content-Type for HTML form submission is application/x-www-form-urlencoded, hence it is worth introducing in API dash.

Reference: Mozilla Documentation image

Fixing this should start from introducing a new sub-type inside consts.dart file and then creating a new ContentType for the new type and setting up the Content Type based on whether there are any files associated with the request or not. Below are some code snippets from consts.dart which are to be modified to start working on this issue.

image image

Device Info (The device where you encountered this issue):

ashitaprasad commented 7 months ago

A new content-type needs to be added but in UI it can be done in two ways:

himanshugoyal77 commented 5 months ago

@ashitaprasad I would like to give it a try

ashitaprasad commented 5 months ago

Sure @himanshugoyal77 you can give it a try. It will be assigned once you send across a PR.

ilovefreesw commented 3 months ago

Without this can't use it for getting access tokens for OAuth.

ashitaprasad commented 2 months ago

@ilovefreesw You can use this for getting access tokens for OAuth Just set the field type as String for form data fields