npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

restinga

v1.0.0

Published

REST API abstraction layer to easily consume data. Based on artesaos/restinga

Downloads

4

Readme

restinga-node

REST API abstraction layer to easily consume data. Based on artesaos/restinga.

Build Status Coverage Status XO code style

Contents

Usage

npm install -S restinga

Overview

digital-ocean-descriptor.js
import {Descriptor} from 'restinga';
import {Bearer} from 'restinga/lib/auth';

export default class DigitalOceanDescriptor extends Descriptor {
  constructor() {
    super({
      service: 'digital-ocean',
      prefix: 'https://api.digitalocean.com/v2',
      
      // Optional User-Agent for requests:
      agent: 'restinga-node/1.0.0 (https://github.com/jay-ess/restinga-node)'
    });
  }
  
  // Optional auth setup
  get authorization() {
    return new Bearer('YourToken');
  }
}
container.js
import {Container} from 'restinga';
import DigitalOceanDescriptor from './digital-ocean-descriptor';

Container.register(new DigitalOceanDescriptor());
droplet.js
import {Resource} from 'restinga';
import {receiveJson, sendJson} from 'restinga/lib/format';

export default class Droplet extends receiveJson(sendJson(Resource)) {
  setup() {
    super.setup({
      service: 'digital-ocean', // match a descriptor service name
      name: 'droplets',
      identifier: 'id',
      collectionRoot: 'droplets',
      itemRoot: 'droplet'
    });
  }
}
usage.js
import Droplet from './droplet';

const droplet = new Droplet({
  name: 'server.restinga.dev',
  region: 'nyc3',
  size: '512mb',
  image: 'ubuntu-14-04-x64'
});

// Resources methods return Promises

droplet.save()
  .then(droplet => console.log(droplet.get('id'))) // Returns itself
  .catch(err => console.log(err));

// Wanna some async-await?

try {
  await droplet.save();
  console.log(droplet.get('id'));
} catch (err) {
  console.log(err);
}

See a working example: test/resource.test.js.

Debug

Wanna know what's happening behind the scenes? This module uses visionmedia/debug, so you can just run DEBUG=restinga:* node your-file.js and get a pretty output of how restinga is working.

Docs

Resource methods

Method | Return Type | Description --- | --- | --- hasParentResource() | Boolean | True if you're using a nested resource childResource(resource) | Resource | Make a resource your child getIdentifier() | ?string | Return the identifier value get(key) | * | Return key from attributes set(key, value) | self | Change a key from attributes set(obj) | self | Change multiple attributes unset(key) | self | Delete key from attributes static all(query) | Promise => Resource[] | Static search resources getAll(query) | Promise => Resource[] | Search resources static find(identifier) | Promise => Resource | Static search for an resource with identifier = identifier doFind(identifier) | Promise => Resource | Search for an resource with identifier = identifier save() | Promise => Resource | Save this resource update() | Promise => Resource | Update this resource destroy() | Promise | Delete this resource

Make Your Auth System

For you to make your own authorization class, just make a class with a setupAuth() method that takes no params and returns an object like this:

class MyAuthSystem {
  setupRequest() {
    return {
      opts: {},
      headers: {}
    };
  }
}

opts follow http.request since we use got for requests. And headers are plain HTTP headers.

Make Your Format

Formats are High Order Classes that work as mixins and take care of understand what comes from your REST API responses.

To make a format, you must build receiveSomething() and sendSomething() mixins. See src/format/ for examples.

Receiver Methods:

Method | Return Type | Description --- | --- | --- getAcceptHeader() | string | Value to the Accept HTTP header factory(rawResponse) | Resource | Parse a resource and return it's instance factoryCollection(rawResponse) | Resource[] | Parse multiple resources and returns an array of instances

Sender Methods:

Method | Return Type | Description --- | --- | --- getContentTypeHeader() | string | Value to the Content-Type HTTP header encode() | * | Do whatever you need with this.attributes before sendind it

License

MIT