spring-data-rest-json-hal-client
Preconfigured rest npm package that acts like JSON+HAL JS-Client for Spring Data REST backend.
' use strict ' ;
const rest = require ( ' rest ' ) ;
const mime = require ( ' rest/interceptor/mime ' ) ;
const errorCode = require ( ' rest/interceptor/errorCode ' ) ;
const baseRegistry = require ( ' rest/mime/registry ' ) ;
const registry = baseRegistry . child ( ) ;
registry . register ( ' application/hal+json ' , require ( ' rest/mime/type/application/hal ' ) ) ;
registry . register ( ' application/schema+json ' , require ( ' rest/mime/type/application/json ' ) ) ;
registry . register ( ' application/json ' , require ( ' rest/mime/type/application/json ' ) ) ;
registry . register ( ' multipart/form-data ' , require ( ' rest/mime/type/multipart/form-data ' ) ) ;
registry . register ( ' text/plain ' , require ( ' rest/mime/type/text/plain ' ) ) ;
registry . register ( ' text/uri-list ' , require ( ' ./mime/type/text/uri-list ' ) ) ;
const client = rest
. wrap ( mime , { registry : registry } )
. wrap ( errorCode ) ;
module . exports = client ;
How to use
First, import the needed operation (get
, post
, put
, patch
, del
or client
for backwards compatibility or more complicated operations) into your Javascript file where you are going to use it:
import { get } from ' @khara/spring-data-rest-json-hal-client ' ;
or
import { post } from ' @khara/spring-data-rest-json-hal-client ' ;
or
import { put } from ' @khara/spring-data-rest-json-hal-client ' ;
or
import { patch } from ' @khara/spring-data-rest-json-hal-client ' ;
or
import { del } from ' @khara/spring-data-rest-json-hal-client ' ;
or
import { client } from ' @khara/spring-data-rest-json-hal-client ' ;
(client
is for backwards compatibility or for real complicated operations that are not covered in simple requests) or more than one
import { get , post , del } from ' @khara/spring-data-rest-json-hal-client ' ;
Then use it in the same fragment as in the following examples:
...
get ( ' /api/users/all ' ) . then ( successfulResponse => console . log ( successfulResponse ) , error => console . error ( error ) ) ;
get ( ' /api/users/all ' , { ' Content-Type ' : ' application/json ' } ) . then ( successfulResponse => console . log ( successfulResponse ) , error => console . error ( error ) ) ;
...
client ( ) . then ( ) ;
...
Examples
path
is always required logically, but headers and entity are optional depending from your services.
GET
get ( ' /some/path ' ) . then ( successfulResponse => console . log ( successfulResponse ) , error => console . error ( error ) ) ;
or with headers
get ( ' /some/path ' , { ' Content-Type ' : ' application/json ' } ) . then ( successfulResponse => console . log ( successfulResponse ) , error => console . error ( error ) ) ;
or backwards compatible
client ( { method : ' GET ' , path : ' /some/path ' } )
. then ( response => { console . log ( ' Success: ' , response ) } , response => { console . log ( ' Error: ' , response ) } ) ;
...
client ( { method : ' GET ' , path : ' /some/path ' , headers : { ' Content-Type ' : ' application/json ' } } )
. then ( response => { console . log ( ' Success: ' , response ) } , response => { console . log ( ' Error: ' , response ) } ) ;
POST
post ( ' /some/path ' , { firstName : ' Max ' , lastName : ' Mustermann ' } , { ' Content-Type ' : ' application/json ' } )
. then (
successfulResponse => { console . log ( ' Success: ' , successfulResponse ) } ,
errorResponse => {
if ( errorResponse . status . code === 403 ) {
alert ( ' ACCESS DENIED: You are not authorized to update! ' ) ;
} else if ( errorResponse . status . code === 412 ) {
alert ( ' DENIED: Your copy is stale! ' ) ;
} else {
console . log ( errorResponse ) ;
}
} ) ;
or backwards compatible
client ( { method : ' POST ' , path : ' /some/path ' , entity : { firstName : ' Max ' , lastName : ' Mustermann ' } , headers : { ' Content-Type ' : ' application/json ' } } )
. then (
response => { console . log ( ' Success: ' , response ) } ,
response => {
if ( response . status . code === 403 ) {
alert ( ' ACCESS DENIED: You are not authorized to update! ' ) ;
} else if ( response . status . code === 412 ) {
alert ( ' DENIED: Your copy is stale! ' ) ;
} else {
console . log ( response ) ;
}
} ) ;
PUT
put ( ' /some/path ' , { firstName : ' Max ' , lastName : ' Mustermann ' } , { ' Content-Type ' : ' application/json ' } )
. then (
successfulResponse => { console . log ( ' Success: ' , successfulResponse ) } ,
errorResponse => {
if ( errorResponse . status . code === 403 ) {
alert ( ' ACCESS DENIED: You are not authorized to update! ' ) ;
} else if ( errorResponse . status . code === 412 ) {
alert ( ' DENIED: Your copy is stale! ' ) ;
} else {
console . log ( errorResponse ) ;
}
} ) ;
or backwards compatible
client ( { method : ' PUT ' , path : ' /some/path ' , entity : { firstName : ' Max ' , lastName : ' Mustermann ' } , headers : { ' Content-Type ' : ' application/json ' } } )
. then (
response => { console . log ( ' Success: ' , response ) } ,
response => {
if ( response . status . code === 403 ) {
alert ( ' ACCESS DENIED: You are not authorized to update! ' ) ;
} else if ( response . status . code === 412 ) {
alert ( ' DENIED: Your copy is stale! ' ) ;
} else {
console . log ( response ) ;
}
} ) ;
DELETE
del ( ' /some/path ' , { ' Content-Type ' : ' application/json ' } )
. then ( response => { console . log ( " Success: " , response ) } , response =>
{
if ( response . status . code === 403 ) {
alert ( ' ACCESS DENIED: You are not authorized to delete! ' ) ;
}
else {
console . log ( response ) ;
}
} ) ;
or backwards compatible
client ( { method : ' DELETE ' , path : ' /some/path ' , headers : { ' Content-Type ' : ' application/json ' } } )
. then (
response => { console . log ( ' Success: ' , response ) } ,
response => {
if ( response . status . code === 403 ) {
alert ( ' ACCESS DENIED: You are not authorized to delete! ' ) ;
}
else {
console . log ( response ) ;
}
} ) ;