GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - wikimedia/restbase: Distributed storage with REST API & dispatcher for backend services.

BranchesTags
Open more actions menu

Latest commit

 

History

3,322 Commits
3,322 Commits

Folders and files

NameName
Last commit message
Last commit date
.github/workflows
.github/workflows
 
 
.pipeline
.pipeline
 
 
doc
doc
 
 
lib
lib
 
 
maintenance
maintenance
 
 
projects
projects
 
 
sys
sys
 
 
test
test
 
 
v1
v1
 
 
.dockerignore
.dockerignore
 
 
.eslintignore
.eslintignore
 
 
.eslintrc.yml
.eslintrc.yml
 
 
.gitignore
.gitignore
 
 
.mocharc.yaml
.mocharc.yaml
 
 
DUMMY
DUMMY
 
 
LICENSE
LICENSE
 
 
README.md
README.md
 
 
config.backend.test.yaml
config.backend.test.yaml
 
 
config.example.yaml
config.example.yaml
 
 
config.frontend.test.yaml
config.frontend.test.yaml
 
 
config.fullstack.test.yaml
config.fullstack.test.yaml
 
 
index.js
index.js
 
 
package.json
package.json
 
 
server.js
server.js
 
 

Repository files navigation

RESTBase Build Status Coverage Status

RESTBase was built to provide a low-latency & high-throughput API for Wikipedia / Wikimedia content. It is basically a storage proxy, which presents a coherent API powered by Swagger specs to the outside, and backs up many of these entry points with storage. The default table storage backend is based on Cassandra, which helps it to perform well at Wikimedia's scale without placing undue burden on operations.

As a proxy, RESTBase does not perform any significant content processing itself. Instead, it requests content transformations from backend services when needed, and typically (depending on configuration) stores it back for later retrieval. For high-volume static end points, most requests will be satisfied directly from storage.

The table storage backends conform to a RESTful table storage API similar to Amazon DynamoDB and Google DataStore. The primary implementation uses Apache Cassandra. Notable features include automatically maintained secondary indexes and some lightweight transaction support. A SQLite backend is under development.

RESTBase systematically emits statsd metrics about storage and backend requests. Specifically, the systematic metric production for backend services provides a good baseline level of instrumentation for tracking performance and errors in a micro-service architecture.

Issue tracking

We use Phabricator to track issues. See the list of current issues in RESTBase.

Installation

Make sure that you have node 6+:

sudo apt-get install nodejs nodejs-legacy nodejs-dev npm

Note: if your distribution does not have a recent version of Node, you can install one via nvm.

From the restbase project directory, install the Node dependencies:

npm install

Start RESTBase:

node server

The defaults without a config file should work for a local Cassandra installation with the default passwords. Restbase has been tested with Cassandra 2.2.6. To customize RESTBase's behaviour, copy the example config to its default location:

cp config.example.yaml config.yaml

You can also pass in the path to another file with the -c commandline option to server.js. If you're running a single Cassandra instance (e.g. a local development environment), set defaultConsistency to one in config.yaml.

Usage

See the Wikimedia REST content API sandbox for a fine example of what RESTBase can do.

Development

Testing

To run all the tests from a clean slate, first make sure Cassandra is running locally, then fire up the tests with npm:

npm test

To run tests from a single file, e.g. test/features/pagecontent/rerendering.js, run mocha with the file as an argument:

mocha test/features/pagecontent/rerendering.js

Note that this might require some setup (e.g. creating the necessary domain and buckets), which is currently done by test/buckets.js.

This also works for a directory, e.g. test/features/pagecontent/:

mocha test/features/pagecontent

Coverage

To check the test coverage, use npm, then browse the report:

npm run-script coverage

The coverage report can now be found in <project>/coverage/lcov-report/index.html.

Design docs

  • RESTBase
  • RESTBase-cassandra (storage backend)

About

Distributed storage with REST API & dispatcher for backend services.

www.mediawiki.org/wiki/RESTBase

Topics

backend-servicescassandrajavascriptrest-apirestbasewikipedia-api

Resources

Readme
Apache-2.0 license

Code of conduct

Code of conduct
Activity
Custom properties

Stars

111 stars

Watchers

11 watching

Forks

81 forks
Report repository

Releases

Packages

Used by

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.