Exemplo de aplicação Java com REST e framework Ember.js

Olá Javeiros,

Pra quem procura outra forma de fazer aplicativos Web, deixando de lado a renderização de páginas no servidor com JSP/JSF e partir para frameworks JavaScript Client Side,

Eu criei uma aplicação de exemplo usando o framework Ember.js com JAX-RS e publiquei no github https://github.com/brunorg/ember-java.

É uma aplicação bem simples e que aborda alguns dos recursos do Ember como computed properties, templates, observers, bindings, helpers.

Além disso ela utiliza o Ember Data com o DS.RESTAdapter e contém alguns ajustes nos serviços REST do lado Java para funcionamento com essa API.

Até onde ví, ficou muito bom, parabéns!

Dúvida: você não usou HATEOAS em ponto algum dos seus serviços, né? Tem planos? O Ember.js ajuda nesse sentido?

[]'s

Muito bom Bruno. Também ando querendo seguir essa linha. Mas estou usando VRaptor e AngularJS.

[quote=Alexandre Saudate]Até onde ví, ficou muito bom, parabéns!

Dúvida: você não usou HATEOAS em ponto algum dos seus serviços, né? Tem planos? O Ember.js ajuda nesse sentido?

[]'s[/quote]

Procurei entender um pouco o que é HATEOAS antes de te responder, mas não compreendi muito bem, vou te explicar como funciona no Ember.

A configuração dos URLs REST no ember-data são geradas (quando usado a convenção) pelo o mapeamento e nome dos Models.
Supondo que o modelo é formado por ‘Post’ e que cada post possa ter vários ‘Comment’ então ele espera que os resultados desses recursos sejam retornados no seguinte formato
(fonte: http://emberjs.com/guides/models/the-rest-adapter/):

Requisição 1: GET /posts/1
Resposta:
{
  "post": {
    "id": 1,
    "title": "Rails is omakase",
    "comment_ids": [1, 2, 3]
  }
}

Requisição 2: GET /comments?ids[]=1&ids[]=2&ids[]=3
Resposta:
{
  "comments": [{
    "id": 1,
    "body": "But is it _lightweight_ omakase?"
  },
  {
    "id": 2,
    "body": "I for one welcome our new omakase overlords"
  },
  {
    "id": 3,
    "body": "Put me on the fast track to a delicious dinner"
  }]
}

Não sei te dizer se isso é HATEOAS, mas caso queira a API do ember-data permite que você crie seus próprios adapters além dos já fornecidos.

Eu conheço 2 tipos de adapters:

  • DS.FixtureAdapter (para criar protótipos sem necessidade do backend)
  • DS.RESTAdapter (o que eu usei para conversar com o backend Java)

E equipe do ember estava criando outro Adapter como uma alternativa ao DS.RESTAdapter pra quem precisa personalizar as chamadas ajax.

Frederico, também estou querendo testar o AngularJS, vários colegas já me recomendaram, e fiquei curioso pra saber um pouco mais sobre ele.

HATEOAS é uma técnica REST que te traz os links das ações relacionadas ao recurso corrente. Por exemplo, se eu trouxer uma pessoa do meu serviço REST:


<pessoa>
   <id>1</id>
   <nome>Alexandre</nome>
   <link href="/email/1" rel="enviar email" />
</pessoa>

Note que, se a aplicação utilizar o que está no link, ela vai enviar email para o Alexandre - tudo de uma forma flexível o suficiente para comportar uma mudança na URL de envio de e-mails, por exemplo. Também é um uso válido de HATEOAS trazer links para outros recursos se a entidade atual for muito grande - você economiza largura de banda e ainda deixa seu sistema mais flexível, já que esse uso tem uma tendência de forçar você a modelar REST corretamente.

[]'s

Alexandre, valeu pela explicação. Eu também encontrei mais informações no blog do Steve Klabnik http://blog.steveklabnik.com/posts/2011-07-03-nobody-understands-rest-or-http

Se considerar que HATEOAS é equivalente Hipermedia API então o ember.js não irá ajudar, dê uma olhada nesse também http://madhatted.com/2013/3/19/suggested-rest-api-practices

Alguém tem algum exemplo com AngularJS?