Skip to content

An elegant promise based HTTP client for the browser and node.js [WIP]

License

Notifications You must be signed in to change notification settings

vaheqelyan/karin

Repository files navigation

Karin

About

Template literals are very useful. A more advanced form of template literals are tagged templates. Karin works in all major browsers (Chrome, Firefox, IE, Edge, Safari, and Opera). Modern browsers and JavaScript engines support tag templates. It is also compatible with Node.js. The package uses the Fetch API, make sure you have a polyfill to support older browsers. Recommend to use github/fetch

import React from "react";
import { get } from "karin";

export default class Index extends React.Component {
  static async getInitialProps() {
    const { data } = await get`https://api.github.com/repos/zeit/next.js`;
    return { stars: data.stargazers_count };
  }

  render() {
    return (
      <div>
        <p> {this.props.stars} ⭐️</p>
      </div>
    );
  }
}

Installataion

via NPM

npm i karin

via CDN (unpkg)

https://unpkg.com/karin@latest/build/browser/index.umd.js

UMD library exposed as Karin

const { get, post } = Karin;

Import paths

import { get, post, karin } from "karin/build/node";
import { get, post, karin } from "karin/build/browser/index.umd.js";

Make a get request

The response data - By default, if the response data type is Application/JSON, the response will be parsed into JSON

import { get } from "karin";

get`https://api.github.com/repos/vaheqelyan/karin`
  .then(res => console.log(res))
  .catch(err => console.error(err));

Samples

const user = "vahe";
const count = 123;
const filter = true;

get`http://domain.com/user${user}`;
// http://domain.com/user/vahe
get`http://domain.com/user${user}filter${filter}count${count}`;
// http://domain.com/user/vahe/filter/true/count/123
get`http://domain.com/path${{
  user,
  filter,
  count
}}`;
// http://domain.com/path/user/vaheqelyan/filter/true/count/123

const sub = "api.";
get`http://${sub}domain/${{ foo: "bar" }}`;
// Also works http://api.domain.com/foo/bar

get`htpp://domain.com/search/?${{ text: "a", lr: 10262 }}`;
// http://domain.com/search/?text=your query&lr=10262

Make a post request

The post data - If the data is an object, it will be stringified

The response data - By default, if the response data type is application/json, the response will be parsed into JSON

Note that the data to be sent is the last item.

import { post } from "karin";

const user = {
  username: "vaheqelyan",
  password: "XXXX"
};

post`http://localhost:3000/register ${user}`
  .then(res => console.log(res))
  .catch(err => console.log(err));

Options and Parameters

--json --blob --arrbuf --text

get`<URL> --text`;
// •> ▶︎ Promise {<pending>}

--content-json ― application/json

--content-x - application/x-www-form-urlencoded

WIP...

Set Request Header

post({ headers: { XXX: "xxx" } })`<URL> ${{}}`;

Set URL origin

const github = get({ origin: "https://api.github.com" });
github`/users/vaheqelyan`;
// •> ▶︎ Promise {<pending>}

Instance

import { karin } from "karin";

const domain = karin.create({
  origin: "...",
  headers: {
    /**/
  }
});

domain.post``;
domain.get``;

About

An elegant promise based HTTP client for the browser and node.js [WIP]

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •