Bem como o objetivo da camada de visualização, a camada de serviços também tem o propósito de trazer facilidades para o desenvolvimento de aplicações, tentando amenizar os problemas ocasionados por um desenvolvimento sem padrões definidos e no modo "go horse". Foi pensando nestes objetivos que surgiu o projeto COMMONS-BUSINESS, que contempla a camada de serviços e a camada de persistência.
A camada de serviços nada mais é do que uma adaptação do padrão de Restful Objects. Ela é responsável por oferecer uma forma de comunicação entre as diferentes partes do plugin através de URI que são expostos como serviços.
O modelo de URI é baseado nas operações HTTP (POST, PUT, DELETE e GET). E tratando-se do padrão Restful a URI do serviço exposto tem uma estrutura diferente, mantendo, entretanto, sua estrutura base, conforme podemos ver a seguir:.
http://{host}:{port}/{context}/rest/shield/latest/domain/{object}/
Onde:
| Variável | Descrição |
|---|---|
| {host} | Define onde a aplicação esta rodando |
| {port} | É a porta do host onde a aplicação esta rodando |
| {context} | É o Servlet Context da aplicacao. Por exemplo, no crowd normalmente é /crowd |
| {object} | É o objeto da camada de persistência. Ou seja, é a classe Java que representa para a aplicação a entidade de banco de dados |
Conforme dito acima, a camada de serviços expõe serviços que podem ser acionados através de operações HTTP, são elas:
| Operação | Descrição |
|---|---|
| DELETE | |
| GET | |
| POST | |
| PUT |
A seguir, as mesmas serão exploradas, dando exemplos utilização através de arquitetura
Para operações do tipo GET, existem duas maneiras de resgatar objetos através dos serviços rest, A primeira é passando o ID do objeto a ser buscado e a segunda é passando uma condicional para buscar uma lista de um determinado objeto. Estas duas maneiras serão abordadas a seguir:
É a maneira simplificada de resgatar objetos através do serviço, onde será retornado um registro único caso o mesmo exista. Assim sendo, a forma de utilizar este serviço é através da URI base concatenando ela com o identificador único (ID) do objeto a ser resgatado. A camada de serviço interpretará a operação requisitada e realizará uma pesquisa utilizando o identificador passado retornando o referido objeto, caso ele exista. Abaixo podemos ver um exemplo:
URI: ~/{id}

Onde:
| Parâmetro | Descrição |
|---|---|
| company | Este é o objeto representativo do banco de dados. Ou seja, este parâmetro substitui o atributo {object} da URI base da camada de serviço. Neste caso, existe uma classe "Company" que representa uma tabela do banco de dados |
| 1 | É o identificador único (ID) da entidade company no banco de dados. |
Assim sendo, no exemplo acima foi requisitada uma operação do tipo GET para o serviço, tentando buscar uma "company" com ID "1". O retorno desta consulta, como podemos ver, é uma String com os atributos do classe representativa da entidade de banco de dados Company.
É a maneira que a camada de serviço realiza operações de busca um pouco mais complexa. Nela são utilizados operadores pre determinados pela arquitetura conforme podemos ver na listagem abaixo:
| Constante | Representação em SQL | Descrição |
|---|---|---|
| EQ | = | |
| LTE | <= | |
| GTE | >= | |
| LT | < | |
| GT | > | |
| ST | ||
| EN | ||
| CO | ||
| NST | ||
| NEN | ||
| NCO | ||
| IN | in | |
| IS | is | |
| NEQ | != |
URI: ~/actions/find
