HTTP Request snippet generator for many languages & tools including:
cURL
,HTTPie
,JavaScript
,Node
,C
,Java
,PHP
,Objective-C
,Swift
,Python
,Ruby
,C#
,Go
,OCaml
and more!
Relies on the popular HAR format to import data and describe HTTP calls.
- HTTPSnippet's input is a JSON object that represents an HTTP request in the HAR Request Object format.
- HTTPSnippet's output is executable code that sends the input HTTP request, in a wide variety of languages and libraries.
- You provide HTTPSnippet your desired
target
,client
, andoptions
.- a
target
refers to a group of code generators. Generally, a target is a programming language likeRust
,Go
,C
, orOCaml
. client
refers to a more specific generator within the parent target. For example, theC#
target has two available clients,httpclient
andrestsharp
, each referring to a popular C# library for making requests.options
are per client and generally control things like specific indent behaviors or other formatting rules.
- a
npm install --save httpsnippet-lite
import { HTTPSnippet } from 'httpsnippet-lite';
const snippet = new HTTPSnippet({
method: 'GET',
url: 'http://mockbin.com/request',
});
const options = { indent: '\t' };
const output = await snippet.convert('shell', 'curl', options);
console.log(output);
NPM | Yarn |
---|---|
npm install --save httpsnippet-lite |
yarn add httpsnippet-lite |
See https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/har-format for the TypeScript type corresponding to this type
interface Entry {
request: Partial<HarRequest>;
}
interface HarEntry {
log: {
version: string;
creator: {
name: string;
version: string;
};
entries: {
request: Partial<HarRequest>;
}[];
};
}
type TargetId = string;
type ClientId = string;
type Converter<T extends Record<string, any>> = (
request: Request,
options?: Merge<CodeBuilderOptions, T>,
) => string;
interface Client<T extends Record<string, any> = Record<string, any>> {
info: ClientInfo;
convert: Converter<T>;
}
type Extension = `.${string}` | null;
interface TargetInfo {
key: TargetId;
title: string;
extname: Extension;
default: string;
}
interface Target {
info: TargetInfo;
clientsById: Record<ClientId, Client>;
}
Name of conversion target
import { HTTPSnippet } from 'httpsnippet-lite';
const snippet = new HTTPSnippet({
method: 'GET',
url: 'http://mockbin.com/request',
});
The convert
method requires a target ID such as node
, shell
, go
, etc. If no client ID is provided, the default client for that target will be used.
Note: to see the default targets for a given client, see
target.info.default
. For exampleshell
's target has the default ofcurl
.
Many targets provide specific options. Look at the TypeScript types for the target you are interested in to see what options it provides. For example shell:curl
's options correspond to the CurlOptions
interface in the shell:curl
client file.
import { HTTPSnippet } from 'httpsnippet';
const snippet = new HTTPSnippet({
method: 'GET',
url: 'http://mockbin.com/request',
});
// generate Node.js: Native output
console.log(await snippet.convert('node'));
// generate Node.js: Native output, indent with tabs
console.log(
await snippet.convert('node', {
indent: '\t',
}),
);
Useful for validating that a custom target is considered valid by HTTPSnippet.
const isTarget: (target: Target) => target is Target;
import { myCustomTarget } from './my-custom-target';
import { isTarget } from 'httpsnippet-lite';
try {
console.log(isTarget(myCustomTarget));
} catch (error) {
console.error(error);
}
Use addTarget
to add a new custom target that you can then use in your project.
const addTarget: (target: Target) => void;
import { myCustomClient } from './my-custom-client';
import { HAR } from 'my-custom-har';
import { HTTPSnippet, addTargetClient } from 'httpsnippet-lite';
addTargetClient(myCustomClient);
const snippet = new HTTPSnippet(HAR);
const output = await snippet.convert('customTargetId');
console.log(output);
Useful for validating that a custom client is considered valid by HTTPSnippet.
const isClient: (client: Client) => client is Client;
import { myCustomClient } from './my-custom-client';
import { isClient } from 'httpsnippet';
try {
console.log(isClient(myCustomClient));
} catch (error) {
console.error(error);
}
Use addTargetClient
to add a custom client to an existing target. See addTarget
for how to add a custom target.
const addTargetClient: (targetId: TargetId, client: Client) => void;
At the heart of this module is the HAR Format as the HTTP request description format, please review some of the sample JSON HAR Request objects in test fixtures, or read the HAR Docs for more details.
For detailed information on each target, please review the wiki.
Here's a list of the most significant differences between httpsnippet-lite and httpsnippet upstream:
- No reliance on Node.js core modules and globals
- convert() method is async
- HAR is not validated
- CLI is not bundled
- Dual packaging available