@version 0.3.35
Angular Restful Injectable Service 。
- CURD Method in Service
- Do Something Before / After A Request
- [Methods Provided In RestfulService.
npm install --save angular-restful-service@latest
ngModule({
imports: [
RestfulServiceModule,
...
defiend the URI of restful resource
@Injectable()
@URI("/entities")
class MyService extends RestfulService{
constructor(private http:Http,private jsonp:Jsonp){
super(http,jsonp);
}
}
Jsonp is optional for service
keyword in restful service:
@GET/@POST/@DELETE/@PATCH/@PUT are provided
@QUERY/@PATH/@BODY
Request Method
@GET();
public allMyData(){ return null }
use @PATH to defined the URL
@GET("/:id/users")
public allUsersById(@PATH() id:number|string){return null}
this.service.allUsersById(params['id']).subscribe(...)
use @BODY to defined post/put/patch body
@POST("/:id/users")
public addUser(@PATH() id:number|string,@BODY user:USER){return null}
//then in component
let user:User = formedUser();
this.service.addUser(params["id"],user).subscribe(...)
user @QUERY to defiend query params
@GET("/:id/users")
public getUsers(@PATH() id:number|string,@QUERY() params:Object){return null}
//then in component
this.service.getUsers(params["id"],{
page:1,
offset:234
}).subscribe(...);
// set query params key in QUERY decorator like 'id';
@GET()
public getUserById(@QUERY('id') id:Number):Observable<User>{return null}
you can set the request type
// text/json/arrayBuffer/blob
@get("/notice",DATA_TYPE.text)
public getNotice(){return null}
@HEADERS set request headers attributes
default :
*'Accept': 'application/json',
'Content-Type':'application/x-www-form-urlencoded'*
usage:
@POST("/:id/images")
@HEADERS({"Content-Type","multipart/form-data"})
public addImage(@PATH() id:number|string,@BODY params:Object){return null}
this.service.addImage(params["id"],{
file:input.file[0],
code:102
}).subscribe(...);
@Multipart() quickly set a mutipart/form-data header usage:
@Multipart()
@POST("/api/assets/")
public uploadImage(@BODY() request){ return null}
Override beforeFilter in your service.
function beforeFilter(requestOptions:RequestOptions):void{
requestOptions.headers.set('csrf-token',getToken());
//or you can rebuild your request body
refresh(requestOptions.body);
}
Override afterFilter in your service. your subscribe's content is indead the return value of this function.
function afterFilter(response:Response):any{
//or you can rebuild your response body
let json = response.json();
if(json.code == 0){
return json.data;
}else{
throw new Error(json.message);
}
}
functions are defined in RestfulService you can override all of them,or just use them.
@GET()
public findBy<T>(@QUERY() params:Object):Observable<T>{ return null}
@GET("/:id")
public find<T>(@PATH() id:string|number):Observable<T>{ return null}
@GET()
public where<T>(@QUERY() params:Object):Observable<T>{return null}
@GET()
public query<T>(@QUERY() conditions:Object={}):Observable<T>{ return null}
@GET()
public all<T>(){return null}
@POST()
public create<T>(@BODY() model:T){return null}
@PUT("/:id")
public update<T>(@PATH() id:number|string,@BODY() model:T){return null}
@PATCH('/:id')
public patch<T>(@PATH() id:number|string,@BODY() property:Object){return null}
@DELETE('/:id')
public delete<T>(@PATH() id:string){return null}
License MIT