apis-is / apis

Making data readily available to anyone interested
https://apis.is
MIT License
162 stars 64 forks source link
api data iceland javascript node public-data

APIs.is - Making data pretty since 2012!

Codeship Greenkeeper badge

The purpose of APIs.is is to make data readily available to anyone interested. All data that is delivered through APIs.is is JSON formatted and scraped from open public websites.

The code that is running the service is open source under the MIT licence. The platform itself is hosted on a load balanced setup by Advania.

Don't hesitate to lend a hand - All knowledge and help is much appreciated!

Maintainers

@kristjanmik

@benediktvaldez

@koddsson

@MiniGod

Running locally

To run the project locally, first clone this repository...

$ git clone https://github.com/apis-is/apis.git

.... install the dependencies and run the project.

$ npm install
[Bunch of output]
$ npm run

Tests

To run the tests:

$ npm test

The tests utilize a man-in-the-middle library called nock that intercepts requests that the tests made and respond with data from disk. The data was generated using the record feature and saved in mock-data.json.

If a endpoints data source has changed and the we need to re-record this data we can simply set the env variable RECORD_MOCK_DATA to a truthy value and run the tests. This will disable nock in the tests and make requests to each endpoints data source and save that to disk.

RECORD_MOCK_DATA=true npm test

Newly added endpoints should mock the endpoints data source using the nock API since this initial data mocking was only made to help migrate to a mocking library. See the original PR for more info.

Adding a new Endpoint

Step by Step

  1. View current endpoints for structure and hierarchy.
  2. Add a new folder to the endpoints/ directory with the name of your endpoint.
  3. The file will be loaded automatically. Remember to require the server. Bare minimum example endpoint:
const app = require('../../server');

app.get('/path', (req,res) => {
  //Sends out empty json object
  return res.json({});
});

Additional requirements

Add integration tests to the endpoint by creating a file called integration_test.js inside a tests/ folder within your endpoint directory. For reference, please take a look at one of the integration tests.

Add documentation for your endpoint to the gh-pages branch of this repo.

More servers

To ensure close to zero downtime, the plan is to start up more workers/servers around the world so that projects relying on this service will not be affected. Want to help out with that? Feel free to contact us by opening a issue.

Helpful pointers