WOW Mobile Rui Miguel Miranda Ramos
Programa 1. Plataforma WOW 2. WOW Mobile 3. API do WOW 4. Clientes 5. Conclusões
Plataforma WOW
Plataforma WOW Issue tracking system Motor de workflow flexível Plataforma extensível
WOW Mobile
WOW Mobile Requisitos
WOW Mobile Arquitectura
WOW Mobile Arquitectura Java ME Mais controlo sobre o SO GUI mais poderoso/flexível Comunidade de desenvolvimento Instalação por parte do cliente HTML Adaptação do código do WOW web Cross-platform Client-side Limitado a funcionalidades do browser Renderings diferentes
WOW Mobile Comunicação
API do WOW
API do WOW Via de comunicação com os dados da plataforma Desenvolvida para WOW Mobile Principios-chave: integrada, extensível, segura
API do WOW Arquitectura SOAP Simple Object Access Protocol Representational State Transfer REST
API do WOW SOAP Protocolo para troca de mensagens XML Orientado a operações Tradicionalmente usado para integração de sistemas
API do WOW REST Arquitectura para a construção de web services sobre HTTP Orientado a recursos (multiplas representações) Comunicação stateless
API do WOW REST Verbos HTTP Verbos SQL GET SELECT POST UPDATE PUT INSERT DELETE DELETE
API do WOW Arquitectura
API do WOW Arquitectura SOAP REST Standard na integração B2B Funcionalidades adicionais Utilização de contracto (WSDL) Complexidade Clientes dependentes de APIs SOAP Simplicidade Interoperabilidade Escalabilidade Stateless Menos maduro
API do WOW Java JAXB (JSR-222) Java» XML JAX-WS (JSR-224) Java» WSDL / SOAP JAX-RS (JSR-311) Java» HTTP
API do WOW Frameworks
API do WOW Frameworks SOAP REST Apache AXIS2 Metro RESTlet Jersey RESTeasy Gomba Apache CXF
API do WOW Apache CXF Implementa JAX-WS e JAX-RS Flexibilidade Desenvolvimento facilitado, configuração com Spring
REST em Java JAX-WS Uso do HTTP Binding: @WebService public interface WorkOrderWebService { @Get @HttpResource(location="/workorder/{id}") public WorkOrder getworkorder( @WebParam(name="id") String id);
REST em Java JAX-RS Acesso a recursos mapeado através de URLs e métodos HTTP: @Path( /workorder ) public class WorkOrderWebService { @GET @Path( /{id} ) public WorkOrder getworkorder( @PathParam( id") String id) { } }
REST em Java JAX-RS @PUT @ConsumeMime( application/xml ) public CreateResponse createworkorder( WorkOrder workorder) { } @POST @Path( /{id} ) @ProduceMime("application/json") public UpdateResponse updateworkorder( @PathParam( id") String id, WorkOrder updated) { } @DELETE @Path( /{id} ) public DeleteResponse deleteworkorder( @PathParam( id") String id) { }
REST em Java JAX-RS Sub-resource locators
@Path("/customerservice/") public class CustomerService { @Path("/orders/{orderId}/") public Order getorder(@pathparam("orderid") String orderid) {... } } @XmlRootElement(name = "Order") public class Order { private long id; public Order() { } public long getid() { return id; } @GET @Path("products/{productId}/") public Product getproduct(@pathparam("productid")int productid) {... } }
REST em Java JAX-RS Anotações de Contexto @Path( /workorder ) public class WorkOrderWebService { @Context HttpHeaders headers; }
API do WOW Segurança HTTP Basic HTTP Digest
API do WOW Segurança HTTP Basic HTTP Digest HTTP Basic + SSL!
API do WOW Serviços WorkOrderWebService WorkGroupWebService UserWebService QueriesWebService MobileWebService
Resource URL Method Receives Returns On Succ Update /mobile/update/{versionid} GET GetUpdateInfomationRequest GetUpdateInfomationResponse 200 (OK) Requests /workorder/{id} GET GetRequestInformationRequest GetRequestInformationResponse 200 (OK) /workorder/requesttype/{id}/fields WorkOrderCreationFieldsRequest WorkOrderCreationFieldsResponse /workorder/workorders POST 201 (Creat Actions /workorder/{id}/actions POST AddActionRequest AddActionResponse 201 (Creat /workorder/{id}/action/{aid} GET GetActionRequest GetActionResponse 200 (OK) /workorder/{woid}/action/{actionid}/fields GET GetActionFieldsRequest GetActionFieldsResponse 200 (OK) Queries /query/queries GET QueriesListRequest QueriesListResponse 200 (OK) /queries/withconfiguration GET QueriesListRequest QueriesListResponse 200 (OK) /query/byid/{id} GET QueryByIdRequest QueryByIdResponse 200 (OK) /query/byid/{id}/page/{page} GET QueryByIdRequest QueryByIdResponse 200 (OK) /query/byname/{name} GET QueryByNameRequest QueryByNameResponse /query/byname/{name}/page/{page} GET QueryByNameRequest QueryByNameResponse 200 (OK) Dashboard /mobile/dashboard GET DashboardRequest DashboardResponse 200 (OK) /mobile/config/dashboardqueries POST DashboardQueriesRequest DashboardQueriesResponse 200 (OK) Search /workorders/freesearch/{searchterms} GET WOSimpleListResponse 200 (OK) Info /user/userinfo GET UserInfoRequest UserInfoResponse 200 (OK) WorkGroups /workgroup/contexttree GET ContextTreeRequest ContextTreeResponse 200 (OK) /workgroup/fullcontexttree GET ContextTreeRequest ContextTreeResponse 200 (OK) /workgroup/subtree/{id} GET ContextTreeRequest ContextTreeResponse 200 (OK) /workgroup/requesttype/{id}/destinationgroups GET DestinationGroupsRequest DestinationGroupsResponse 200 (OK) /workgroup/{id}/users GET UsersFromGroupRequest UsersFromGroupResponse 200 (OK) /workgroup/change POST WorkGroupChangeRequest WorkGroupChangeResponse 200 (OK)
Clientes da API
Clientes da API Cliente Java Orientado a operações
Clientes da API Cliente Java Orientado a operações Client client = Client.getInstance(); client.setproperty("username", "rm-ramos"); // work order and action ids GetAction getactionoperation = new GetAction(6556, 19999); // prints out the XML representation getactionoperation.printxml(system.out); // returns the Java representation! GetWorkOrderAction action = (GetWorkOrderAction) getactionoperation.getasobject();
Clientes da API Java Scripting Orientado a recursos
Clientes da API Java Scripting Orientado a recursos WebServicesSession session = new WebServicesSession(); // getting a work-order GetRequestInformationResponse workorder = new GetRequestInformationResponse(); workorder.setrequestid(6773); workorder = (GetRequestInformationResponse)session.get(workOrder); // creating a new action Action sendtoanalysis = new Action(); senttoanalysis.setid(6); sendtoanalysis.setdestinygroup("iti Board"); sendtoanalysis.setdescription("acção inserida programaticamente!"); // submiting the action to the system session.registeraction(sendtoanalysis, workorder);
Clientes da API Outros Framework Javascript Adobe AIR+Adobe FLEX Ruby, Python, PHP,...
Conclusões Desenvolvimento REST potenciado por JAX-RS Frameworks para web services Java Integração de aplicações
Conclusões Valor pessoal e profissional do estágio API como valor acrescentado do WOW Trabalho futuro
Questões? Rui Miguel Miranda Ramos Nº aluno: 501062892 ruiramos@gmail.com