README.md
RSpec API
=========
RSpec API aims to make it easy to document and test [pragmatic RESTful web APIs](http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api).
It is still under development, and you can follow its progress by checking out the code on Github.
More documentation and examples are available at [http://rspec-api.github.io](http://rspec-api.github.io)
[![Build Status](https://travis-ci.org/rspec-api/rspec-api.png?branch=master)](https://travis-ci.org/rspec-api/rspec-api)
[![Code Climate](https://codeclimate.com/github/rspec-api/rspec-api.png)](https://codeclimate.com/github/rspec-api/rspec-api)
[![Coverage Status](https://coveralls.io/repos/rspec-api/rspec-api/badge.png)](https://coveralls.io/r/rspec-api/rspec-api)
[![Dependency Status](https://gemnasium.com/rspec-api/rspec-api.png)](https://gemnasium.com/rspec-api/rspec-api)
A basic example
---------------
RSpec API can help develop and document your own web APIs.
A basic example of running RSpec API locally is provided, comprised of:
* a Ruby on Rails *app* that provides a RESTful API for concerts (in [spec/dummy](https://github.com/rspec-api/rspec-api/tree/master/spec/dummy))
* a *test suite* that verifies the expected behavior of the API (in [spec/features/local/](https://github.com/rspec-api/rspec-api/blob/master/spec/features/local/gigs/gigs_spec.rb))
Run the basic example with the following commands:
git clone https://github.com/rspec-api/rspec-api.git
cd rspec-api
bundle
bundle exec rake db:migrate
bundle exec rspec spec/features/local
And you should see all the successful promises matched by the concerts API:
Concerts
GET /concerts
by default
responds with a status code that
should be 200
responds with headers that
should include 'Content-Type': 'application/json; charset=utf-8'
should include 'Link' (for pagination)
...
DELETE /concerts/:id
given an existing id
responds with a status code that
should be 204
Finished in 0.73864 seconds
151 examples, 0 failures
The GitHub API example
----------------------
RSpec API can help specify and verify promises for remote APIs.
An example of running RSpec API for a remote API is provided in [spec/features/remote](https://github.com/rspec-api/rspec-api/blob/master/spec/features/remote).
The code verifies the expected behavior of a number of endpoints of the [GitHub API](http://developer.github.com):
* Activity resources (events, feeds, notifications, starring, watching)
* Gists resources (gists, gist comments)
* Git data resources (blobs, commits)
* Repository resources (repos)
Before running the example, get a GitHub Personal Access Token:
* Browse to your [GitHub settings](https://github.com/settings/applications)
* Click on 'Create new token' under 'Personal Access Token' (name it as you want)
* Copy the generated token and store it on your machine as the environment variable called `RSPEC_API_GITHUB_TOKEN`:
* On OSX and bash, accomplish this by running the command `export RSPEC_API_GITHUB_TOKEN=` followed by your pasted key (no spaces after `=`)
Now, run the GitHub API example with the following commands:
git clone https://github.com/rspec-api/rspec-api.git
cd rspec-api
bundle
bundle exec rspec spec/features/remote
And you should see all the successful promises matched by the GitHub API:
Events
GET https://api.github.com/events
by default
responds with a status code that
should be 200
responds with headers that
should include 'Content-Type': 'application/json; charset=utf-8'
should include 'Link' (for pagination)
...
DELETE https://api.github.com/gists/:id/star
given an existing id 0d7b597d822102148810
responds with a status code that
should be 204
Finished in 1 minute 19.74 seconds
1237 examples, 1 failure, 4 pending
How to contribute
=================
Don’t hesitate to send me code comments, issues or pull requests through GitHub!
All feedback is appreciated. Thanks :)