Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Angular2 support with HATEOAS

I have a restful web service with the support of HATEOAS links. When I call "http://localhost:8080/v1/bookings/1225380?lock=true" link I got following resource URLs. I want to integrate these Hypermedia with my Angular2 application (recently upgraded to final version). I found few resources which were implemented with Angular1 with the support of Angular HAL (links - https://paulcwarren.wordpress.com/2015/04/03/role-based-spas-with-angularjs-and-spring-hateoas/, https://github.com/LuvDaSun/angular-hal/tree/master/src). But I am unable to found a resource for Angular2.

"links": [
  {
    "rel": "client",
    "href": "http://localhost:8080/v1/clients/10000"
  },
  {
    "rel": "passengers",
    "href": "http://localhost:8080/v1/bookings/1225380/passengers"
  },
  {
    "rel": "itinerary",
    "href": "http://localhost:8080/v1/bookings/1225380/itinerary"
  },
  {
    "rel": "self",
    "href": "http://localhost:8080/v1/bookings/1225380?lock=true"
  },
  {
    "rel": "clientBookingHistory",
    "href": "http://localhost:8080/v1/bookings/1225380/clientBookingHistory/10000"
  }
]
like image 935
Shehan Nandathilaka Avatar asked Nov 08 '22 08:11

Shehan Nandathilaka


1 Answers

You can create an Injectable for this and use this class instead of the angular http class. Here you filter the links and than call http with the right link.

@Injectable() 
export class Hypermedia {

   constructor(private http: Http) { }

   get(links: any[], rel: String, body?: any, options?: RequestOptionsArgs): Observable<Response> {
    var link = null;
    var request = null;

    // Find the right link
    links.forEach(function (_link) {
        if (_link.rel === rel) {
            link = _link
            return;
        }
    });

    return this.http.get(link.href);
}

}

Provide this injector and add it to the constructor where you need it

constructor(private hypermedia:Hypermedia)

Then you can simply call it like you normally would call the http class

this.hypermedia.get(myHypermediaLinksArray,myRel)

Hope this helps:)

like image 136
Thijs Hendrikx Avatar answered Dec 17 '22 22:12

Thijs Hendrikx