All Projects → darekf77 → ng2-rest

darekf77 / ng2-rest

Licence: other
Isomorphic, simple, robust REST API library for Browser and NodeJS, ( ts / js ) apps

Programming Languages

typescript
32286 projects
HTML
75241 projects

Projects that are alternatives of or similar to ng2-rest

typesocket
🌐 TypeScript WebSockets library.
Stars: ✭ 24 (-7.69%)
Mutual labels:  typescript-library
avro-typescript
TypeScript Code Generator for Apache Avro Schema Types
Stars: ✭ 19 (-26.92%)
Mutual labels:  typescript-library
deno-aws api
From-scratch Typescript client for accessing AWS APIs
Stars: ✭ 33 (+26.92%)
Mutual labels:  typescript-library
rxjs-ninja
RxJS Operators for handling Observable strings, numbers, booleans and more
Stars: ✭ 68 (+161.54%)
Mutual labels:  typescript-library
fluent-behavior-tree
Typescript/Javascript behavior tree library with a fluent API
Stars: ✭ 55 (+111.54%)
Mutual labels:  typescript-library
KosherZmanim
Port of the KosherJava zmanim library to TypeScript
Stars: ✭ 29 (+11.54%)
Mutual labels:  typescript-library
redux-react-koa-isomorphic-counter-example
Isomorphic port of the redux counter app
Stars: ✭ 77 (+196.15%)
Mutual labels:  isomorphic
isomorphic-relay-boilerplate
No description or website provided.
Stars: ✭ 30 (+15.38%)
Mutual labels:  isomorphic
tua-api
🏗 一款可配置的通用 api 请求函数生成工具(A common tool helps converting configs to api functions)
Stars: ✭ 34 (+30.77%)
Mutual labels:  jsonp
serverhub-mvc
Fast and reliable MVC framework for Nodejs
Stars: ✭ 16 (-38.46%)
Mutual labels:  nodejs-framework
typed-machine
A strict Finite State Machine, written in TS
Stars: ✭ 21 (-19.23%)
Mutual labels:  typescript-library
youtube-deno
A Deno client library of the YouTube Data API.
Stars: ✭ 30 (+15.38%)
Mutual labels:  typescript-library
fetch
Isomorphic Wordpress API client and React hooks - super tiny, super fast.
Stars: ✭ 47 (+80.77%)
Mutual labels:  isomorphic
reblocks
React Components for Nano cryptocurrency (formerly RaiBlocks) - including Payments via Brainblocks
Stars: ✭ 21 (-19.23%)
Mutual labels:  typescript-library
react-native-navigation-drawer-extension
Drawer API built on top of wix react-native-navigation for iOS and Android (with TypeScript!)
Stars: ✭ 151 (+480.77%)
Mutual labels:  typescript-library
FlipED
A LMS built specifically for Thailand's Education 4.0 system.
Stars: ✭ 24 (-7.69%)
Mutual labels:  isomorphic
quranicaudio-app
QuranicAudio.com Mobile App
Stars: ✭ 44 (+69.23%)
Mutual labels:  isomorphic
Node-Mongo
NodeJs server connected with mongo
Stars: ✭ 17 (-34.62%)
Mutual labels:  nodejs-framework
Contemplate
Contemplate: Fast, extendable object-oriented and light-weight Template Engine for PHP, Python, Node.js, Browser and XPCOM/SDK JavaScript
Stars: ✭ 15 (-42.31%)
Mutual labels:  isomorphic
monoreact
📦 React workspaces implementation
Stars: ✭ 13 (-50%)
Mutual labels:  typescript-library

ng2-rest

Isomorphic REST framework for Browser and NodeJS apps.

Simple, robust, efficient REST api for typescript frameworks like: Angular, React, ExpressJS and others.

Nice way to:

  • connect your webapp with RESTfull backend or JSONP api
  • access from NodeJS server third part APIs ( in the same way as in the browser)

Plunker demo

To install package run:

npm install ng2-rest --save

Import Resource class:

import { Resource } from 'ng2-rest';

Resource

Fit you existing API (not only REST) into new fluent objects with Resource class observables. Use power of async in new angular templates;

template.html

Users:
<ul   *ngIf="model.allUsers() | async; else loader; let users" >

  <li  *ngFor="let user of users"> 
  		{{user.id}} {{user.fullName()}} 
		  <br>
		<input type="name" [(NgModel)]="user.name" >
		<button (click)="model.update(user)" > Update </button>
  </li>

</ul>

<ng-template #loader> loading users...  </ng-template>

component.ts

class User {
	name: string;
	surname: string;
	id: number;

	fullName() {
		return `Surname: ${this.surname}, Name: ${this.name}`;
	}
}

// Express.js style url endpoint model
// you can ommit "<User>" part is you don't wanna see response interface
// also you can ommit third argument ",User" is you don't wanna
// map response object to User class objects
const rest = Resource.create<User>("http://yourbackend.com/api","users/:id",{'':User} )

class UserComponent {

   // Prepare your beautiful interface
    model = {
	 allUsers: () => rest.model()
		 .array
		 .get()
		 .observable // Observable resposne (useful for Angular 2+ html templates)
		 .map({ body } => body.json)  , // get all users, body.json => User[] 

	 userBy: (id) => rest.model({id})
		 .get() // Promise response by default
		 .then({ body } => console.log(body.json)) // get user by id,  body.json => User

	 update: async (user:User) =>{
		 try {
			await rest.model({id:user.id}).put(user) // Promise response by default

			alert('Update sucess')
		 } catch(e) {
			alert(e)
		 }	
	 	}
    }

	constructor() { }

}

Specification

Example UrlParams[] : [ { sort: true },{ filter: 'id,5' }, { filter: 'name,test' } ]

Name Parameters Description
.array. get,post,put,delete,jsonp for everything, but with arrays
get UrlParams[] get model by parameters
post model, UrlParams[] post object model
put model, UrlParams[] put object model
delete UrlParams[] remove object by params
jsonp UrlParams[] get jsonp data

Production mode

Nice things to do in production mode:

1. Disable warnings.

If you don't wanna see warning, disable it like this:

if (environment.production) {
  Resource.enableWarnings = false;
}

Angular AOT

If you are using Angular 2+ and AOT ( Ahead Of Time Compilation ), you need to do this in your app.component:

constructor(zone:NgZone) {
    Resource.initAngularNgZone(zone)
}
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].