angular2-in-memory-web-api
Version:
An in-memory web api for Angular 2 demos and tests
143 lines (107 loc) • 4.23 kB
Markdown
# Angular 2 in-memory-web-api
>**UPDATE NOTICE**
>
>This is the last of the npm packages under the name `angular2-in-memory-web-api`.
The new package name is (or soon will be) `angular-in-memory-web-api`.
All versions after 0.0.21 are (or soon will be) shipped under this new name.
**Be sure to update your `package.json` and import statements accordingly**.
An in-memory web api for Angular demos and tests.
It will intercept HTTP requests that would otherwise go to the remote server
via the Angular `XHRBackend` service
This in-memory web api service processes an HTTP request and
returns an `Observable` of HTTP `Response` object
in the manner of a RESTy web api.
It natively handles URI patterns in the form :base/:collectionName/:id?
Examples:
```
// for store with a 'heroes' collection
GET api/heroes // all heroes
GET api/heroes/42 // the character with id=42
GET api/heroes?name=^j // 'j' is a regex; returns heroes whose name contains 'j' or 'J'
GET api/heroes.json/42 // ignores the ".json"
```
Also accepts
"commands":
```
POST "resetDb",
GET/POST "config"" - get or (re)set the config
```
## Basic usage
Create an `InMemoryDataService` class that implements `InMemoryDataService`.
At minimum it must implement `createDb` which
creates a "database" hash whose keys are collection names
and whose values are arrays of collection objects to return or update.
For example:
```
import { InMemoryDbService } from 'angular-in-memory-web-api';
export class InMemHeroService implements InMemoryDbService {
createDb() {
let heroes = [
{ id: '1', name: 'Windstorm' },
{ id: '2', name: 'Bombasto' },
{ id: '3', name: 'Magneta' },
{ id: '4', name: 'Tornado' }
];
return {heroes};
}
}
```
Register this module and your service implementation in `AppModule.imports`
calling the `forRoot` static method with this service class and optional configuration object:
```
// other imports
import { HttpModule } from '@angular/http';
import { InMemoryWebApiModule } from 'angular-in-memory-web-api';
import { InMemHeroService } from '../app/hero-data';
@NgModule({
imports: [
HttpModule,
InMemoryWebApiModule.forRoot(InMemHeroService),
...
],
...
})
export class AppModule { ... }
```
See examples in the Angular.io such as the
[Server Communication](https://angular.io/docs/ts/latest/guide/server-communication.html) and
[Tour of Heroes](https://angular.io/docs/ts/latest/tutorial/toh-pt6.html) chapters.
# Bonus Features
Some features are not readily apparent in the basic usage example.
The `InMemoryBackendConfigArgs` defines a set of options. Add them as the second `forRoot` argument:
```
InMemoryWebApiModule.forRoot(InMemHeroService, { delay: 500 }),
```
## Simple query strings
Pass custom filters as a regex pattern via query string.
The query string defines which property and value to match.
Format: `/app/heroes/?propertyName=regexPattern`
The following example matches all names containing the letter 'j' in the heroes collection.
`/app/heroes/?name=j+`
# To Do
* add tests (shameful omission!)
# Build Instructions
Mostly gulp driven.
The following describes steps for updating from one Angular version to the next
>This is essential even when there are no changes of real consequence.
Neglecting to synchronize Angular 2 versions
triggers typescript definition duplication error messages when
compiling your application project.
- `gulp bump` - up the package version number
- update `CHANGELOG.MD` to record the change
- update the dependent version(s) in `package.json`
- `npm install` the new package(s) (make sure they really do install!)<br>
`npm list --depth=0`
- consider updating typings, install individually/several:
`npm run typings -- install packagename --ambient --save`
**NB: Do not add to `npm postinstall` as that screws up consumers!**
- `npm run typings install`
- `npm run tsc` to confirm the project compiles w/o error (sanity check)
-- NO TESTS YET ... BAD --
- `gulp build`
- commit and push
- `npm publish`
- Fix and validate angular.io docs samples
- Add two tags to the release commit with for unpkg
- the version number
- 'latest'