ΠΠ°Π½Π½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°Π±ΠΎΡΡ Ρ Π²Π°ΡΠΈΠΌ JSON API Π»Π΅Π³ΠΊΠΎΠΉ ΠΈ ΡΠ΄ΠΎΠ±Π½ΠΎΠΉ. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π° Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ AngularJS, Π½ΠΎ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ Π°Π΄Π°ΠΏΡΠΈΡΠΎΠ²Π°Π½Π° Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ framework'Π°ΠΌΠΈ.
ΠΠ»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π°Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ NPM ΡΠ΅Π·ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ
Π² Π΄ΠΎΠΌΠ°ΡΠ½Π΅ΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈΠ»ΠΈ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ°ΠΉΠ» .npmrc
ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ:
registry = http://npm.orbita1.ru:4873
always-auth=true
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°:
yarn add @orbit/json-api-store
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ JsonApiModule Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Π½Π°ΡΠ΅Π³ΠΎ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠΎΠ΄ΡΠ»Ρ JsonApiModule ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ HttpModule, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ
HttpModule Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½ ΠΏΠ΅ΡΠ²ΡΠΌ:
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { HttpClientModule } from '@angular/common/http';
import { JsonApiModule } from '@orbit/json-api-store';
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
HttpClientModule,
JsonApiModule.forRoot('http://localhost:4200/api')
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡΠΈΠΌΠ΅ΡΠ°, ΠΏΡΠΈ ΠΈΠΌΠΏΠΎΡΡΠ΅ JsonApiModule Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ JsonApiModule.forRoot() ΠΈ ΡΠΊΠ°Π·Π°ΡΡ Π±Π°Π·ΠΎΠ²ΡΠΉ URL Π²Π°ΡΠ΅Π³ΠΎ JSON API.
ΠΡΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ, JsonApiModule ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½ ΠΈ Π² Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ JsonApiModule.forRoot():
import { NgModule } from '@angular/core';
import { JsonApiModule } from '@orbit/json-api-store';
import { ContactsComponent } from './contacts.component';
@NgModule({
declarations: [
ContactsComponent
],
imports: [
JsonApiModule
],
providers: [],
bootstrap: [ContactsComponent]
})
export class ContactsModule { }ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Ρ JsonApiStore Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΠΈΡΠ°ΡΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ. ΠΠΎΠ΄Π΅Π»Ρ - ΡΡΠΎ plain typescript object,
ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΡΡΠ½ΠΎΡΡΠΎΡΡΡ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΡΠΈ ΡΡΠΎΠΌ ΠΊΠ»Π°ΡΡ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠΉ
ΠΌΠΎΠ΄Π΅Π»Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Resource, Ρ.Π΅. ΠΈΠΌΠ΅ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ id, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ
Ρ
ΡΠ°Π½ΠΈΡΡΡΡ ΡΡΡΠΎΠΊΠΎΠ²ΡΠΉ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠ΅ΡΡΡΡΠ° JSON API. ΠΠ»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° ΠΌΡ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΊΠ»Π°ΡΡ
JsonApiResource, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π²Π°ΡΠΈΡ
ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ.
ΠΠ»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΎΠΏΠΈΡΠ΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ:
import { JsonApiResource } from '@orbit/json-api-store';
import { Office } from './office.model';
import { UserRole } from './user-role.model';
export class User extends JsonApiResource {
/**
* ΠΠΌΡ
*/
name: string;
/**
* ΠΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΡΠΉ Π°Π΄ΡΠ΅Ρ
*/
email: string;
/**
* ΠΡΡΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
*/
office: Office;
/**
* Π‘ΠΏΠΈΡΠΎΠΊ ΡΠΎΠ»Π΅ΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
*/
roles: UserRole[];
}ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ JsonApiStore ΡΠΌΠΎΠ³ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π½Π°ΡΠΈΠΌΠΈ ΠΌΠΎΠ΄Π΅Π»ΡΠΌΠΈ, Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ
ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΡ ΠΊ ΠΊΠ»Π°ΡΡΡ ΠΈ Π΅Π³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌ.
Π ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΊ ΡΠ°ΠΌΠΎΠΌΡ ΠΊΠ»Π°ΡΡΡ User Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡ @Model().
ΠΡΠΈ ΡΡΠΎΠΌ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΊΠ°Π·Π°ΡΡ ΡΠΈΠΏ ΡΠ΅ΡΡΡΡΠ° JSON API, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ:
import { JsonApiResource, Model } from '@orbit/json-api-store';
@Model({type: 'users'})
export class User extends JsonApiResource {
}ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΡ ΠΊ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌ Π½Π°ΡΠ΅Π³ΠΎ ΠΊΠ»Π°ΡΡΠ°.
ΠΠ»Ρ ΡΠ²ΠΎΠΉΡΡΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌ JSON API ΡΠ΅ΡΡΡΡΠ°, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡ
@Attribute():
import { JsonApiResource, Model, Attribute } from '@orbit/json-api-store';
import { Office } from './office.model';
import { UserRole } from './user-role.model';
@Model({type: 'users'})
export class User extends JsonApiResource {
@Attribute()
name: string;
@Attribute()
email: string;
}ΠΠ»Ρ ΡΠ²ΠΎΠΉΡΡΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ Π²Π½Π΅ΡΠ½ΠΈΠΌ ΡΠ²ΡΠ·ΡΠΌ JSON API ΡΠ΅ΡΡΡΡΠ°, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡ
@Relationship() ΠΈ ΡΠΊΠ°Π·Π°ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ :
import { Attribute, JsonApiResource, Model, Relationship } from '@orbit/json-api-store';
import { Office } from './office.model';
import { UserRole } from './user-role.model';
@Model({type: 'users'})
export class User extends JsonApiResource {
@Relationship({resource: Office})
office: Office;
@Relationship({resource: UserRole, isArray: true})
roles: UserRole[];
}ΠΠ»Ρ ΡΠ²ΠΎΠΉΡΡΠ², ΠΊΠΎΡΠΎΡΡΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΠ²ΡΠ΅Ρ ΡΠ²ΡΠ·Ρ "ΠΎΠ΄ΠΈΠ½-ΠΊΠΎ-ΠΌΠ½ΠΎΠ³ΠΈΠΌ", Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΡΡΠ°Π²ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° isArray Π² true. Π Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠ°ΠΊΠΈΠΌ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ
roles, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΡΠ°Π·Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ»Π΅ΠΉ.
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΌΡ ΠΎΠΏΠΈΡΠ°Π»ΠΈ ΠΌΠΎΠ΄Π΅Π»Ρ User, Π½Π°ΠΌ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ Office
ΠΈ UserRole:
import { Attribute, JsonApiResource, Model } from '@orbit/json-api-store';
@Model({type: 'offices'})
export class Office extends JsonApiResource {
@Attribute()
title: string;
}
@Model({type: 'user-roles'})
export class UserRole extends JsonApiResource {
@Attribute()
role: string;
@Attribute()
status: string;
}ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΌΡ ΠΎΠΏΠΈΡΠ°Π»ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π² Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΠΌΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
JsonApiStore Π΄Π»Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π½Π°ΡΠ΅ΠΌΡ backend'Ρ. ΠΠ±ΡΡΠ½ΠΎ Π²ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΊΠ°ΠΊΠΈΠΌ Π»ΠΈΠ±ΠΎ
ΡΠΈΠΏΠΎΠΌ ΡΠ΅ΡΡΡΡΠΎΠ² Π³ΡΡΠΏΠΈΡΡΡΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΠ΅ΡΠ²ΠΈΡΠ΅ ΠΈ Π·Π°ΡΠ΅ΠΌ ΡΡΠΎΡ ΡΠ΅ΡΠ²ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ UserService, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π½Π°ΠΌ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌΠΈ Π½Π°ΡΠ΅Π³ΠΎ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ:
import { JsonApiStore } from '@orbit/json-api-store';
import { Injectable } from '@angular/core';
@Injectable()
export class UserService {
constructor(private store: JsonApiStore) {};
}ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΡ dependency injection, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΠ΅ AngularJS, ΠΌΡ Π²Π½Π΅Π΄ΡΠΈΠ»ΠΈ
JsonApiStore Π² Π½Π°Ρ ΡΠ΅ΡΠ²ΠΈΡ. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π½Π°ΡΠ΅Π³ΠΎ
ΡΠ΅ΡΠ²ΠΈΡΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ Π½Π°ΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ΅ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ Π½Π°ΡΠΈΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
ΠΠ°ΡΠ½Π΅ΠΌ Ρ ΠΌΠ΅ΡΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΠΊΡΠΈΡΠ΅ΡΠΈΡΠΌ:
import { JsonApiDocument, JsonApiStore } from '@orbit/json-api-store';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { User } from '../models/user.model';
@Injectable()
export class UserService {
getList(params?: any): Observable<JsonApiDocument<User[]>> {
return this.store.getList(User, params);
}
}ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΏΠΈΡΠΊΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ JsonApiStore.getList(). ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄
ΠΎΡΠΏΡΠ°Π²ΠΈΡ GET-Π·Π°ΠΏΡΠΎΡ Π½Π°ΡΠ΅ΠΌΡ JSON API (GET http://localhost:4200/api/users) ΠΈ Π²Π΅ΡΠ½Π΅Ρ
JsonApiDocument, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΎΡΠ²Π΅Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΠΎΡ ΡΠ΅ΡΠ²Π΅ΡΠ°.
ΠΠ°Π»Π΅Π΅ Π΄Π°Π²Π°ΠΉΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΌΠ΅ΡΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π½Π°ΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅:
import { JsonApiDocument, JsonApiStore } from '@orbit/json-api-store';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { User } from '../models/user.model';
@Injectable()
export class UserService {
get(id: string, params?: any): Observable<JsonApiDocument<User>> {
return this.store.get(User, id, params);
}
}ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ JsonApiStore.get().
ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΎΡΠΏΡΠ°Π²ΠΈΡ GET-Π·Π°ΠΏΡΠΎΡ (GET http://localhost:4200/api/users/123) ΠΈ Π²Π΅ΡΠ½Π΅Ρ ΠΎΡΠ²Π΅Ρ
ΡΠ΅ΡΠ²Π΅ΡΠ° Π² Π²ΠΈΠ΄Π΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° JsonApiDocument.
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΌΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π½Π°ΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡ , Π΄Π°Π²Π°ΠΉΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΌΠ΅ΡΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π½Π°ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π½ΠΎΠ²ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΈ Π²Π½ΠΎΡΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ :
import { JsonApiDocument, JsonApiStore } from '@orbit/json-api-store';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { User } from '../models/user.model';
@Injectable()
export class UserService {
save(users: User, params?: any): Observable<JsonApiDocument<User>> {
return this.store.save(users, params);
}
}ΠΠ΄Π΅ΡΡ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ JsonApiStore.save(). ΠΡΠ»ΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°
users ΠΏΠ΅ΡΠ΅Π΄Π°Π½ Π½ΠΎΠ²ΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, JsonApiStore ΠΎΡΠΏΡΠ°Π²ΠΈΡ POST-Π·Π°ΠΏΡΠΎΡ
(POST http://localhost:4200/users). Π ΡΠ»ΡΡΠ°Π΅ Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ,
JsonApiStore ΠΎΡΠΏΡΠ°Π²ΠΈΡ PATCH-Π·Π°ΠΏΡΠΎΡ (PATCH http://localhost:4200/api/users/123).
Π ΠΎΠ±ΠΎΠΈΡ
ΡΠ»ΡΡΠ°ΡΡ
JsonApiStore Π²Π΅ΡΠ½Π΅Ρ ΠΎΡΠ²Π΅Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° Π² Π²ΠΈΠ΄Π΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° JsonApiDocument.
ΠΠ°Π»Π΅Π΅ Π½Π°ΠΌ ΠΎΡΡΠ°Π»ΠΎΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΡΠ΄Π°Π»ΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ:
import { JsonApiDocument, JsonApiStore } from '@orbit/json-api-store';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { User } from '../models/user.model';
@Injectable()
export class UserService {
remove(user: User, params?: any): Observable<JsonApiDocument<User>> {
return this.store.remove(user, params);
}
}ΠΠ»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ JsonApiStore.remove(), ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠΏΡΠ°Π²ΠΈΡ
DELETE-Π·Π°ΠΏΡΠΎΡ (DELETE http://localhost:4200/api/users/123) Π½Π°ΡΠ΅ΠΌΡ API ΠΈ Π²Π΅ΡΠ½Π΅Ρ ΠΎΡΠ²Π΅Ρ
ΡΠ΅ΡΠ²Π΅ΡΠ° Π² Π²ΠΈΠ΄Π΅ JsonApiDocument