Guia da API WAP PUSH REST. versão 1.0



Documentos relacionados
Manual da API SMS REST versão 1.0

Manual da API MMS REST. versão 1.0

18/04/2006 Micropagamento F2b Web Services Web rev 00

O protocolo HTTP. O que é o protocolo HTTP?

REST. Caio Nakashima

Universidade Federal do Espírito Santo CCA UFES. Centro de Ciências Agrárias CCA UFES Departamento de Computação. Programação WEB

UNIVERSIDADE. Sistemas Distribuídos

DOCUMENTAÇÃO DO FRAMEWORK - versão 2.0

Conceitos de Ajax Exemplos de uso do Ajax no braço, muitos exemplos, muito código (HTML, CSS, JavaScript, PHP, XML, JSON)

Manual do Usuário - ProJuris Web - Fila de s Página 1 de 8

Sistema Protocolo Integrado Manual de Integração ao Web Service

API REST Alimentação/Retorno

Programação Web Prof. Wladimir

Aula 03 - Projeto Java Web

Guia de Integração para Transferência

Wireshark. Captura de Protocolos da camada de aplicação. Maicon de Vargas Pereira

Web. Até a década de 1990, a Internet era utilizada. por pesquisadores, acadêmicos e universitários, para troca de arquivos e para correio eletrônico.

Java Enterprise Edition. by Antonio Rodrigues Carvalho Neto

Sistema Nacional de Registro de Hóspedes - SNRHos. PGTUR Plataforma de Gestão do Turismo Manual Técnico de Utilização do Web Service Versão 1.

Associação Carioca de Ensino Superior Centro Universitário Carioca

Manual técnico. v /10

4D XML Keys BuildApplication

Entendendo como funciona o NAT

Integração de sistemas utilizando Web Services do tipo REST

Comunicação entre Processos

Manual Integra S_Line

Instalação do TOTVS ESB. Guia de Instalação do TOTVS ESB

Service Oriented Architecture SOA

Guia de administração para a integração do Portrait Dialogue 6.0. Versão 7.0A

2 Diagrama de Caso de Uso

Um pouco do Java. Prof. Eduardo

MINISTÉRIO DO DESENVOLVIMENTO AGRÁRIO SUBSECRETARIA DE PLANEJAMENTO, ORÇAMENTO E ADMINISTRAÇÃO COORDENAÇÃO-GERAL DE MODERNIZAÇÃO E INFORMÁTICA

ADDRESS RESOLUTION PROTOCOL. Thiago de Almeida Correia

Universo Online. Loja de Aplicativos - API v1.0 [05/2012]

Criando e consumindo Web service REST com PHP e JSON. Palestrante: Weiberlan Garcia

Parte I. Demoiselle Mail

Internet e protocolos web. A Internet é uma rede descentralizada de recursos computacionais. Topologia tem de fornecer caminhos alternativos

Guia rápido de uso da interface beta do NFS-e Easy para operação com Sistemas WebISS

Acessando um Banco de Dados

Camada de Aplicação. DNS Domain Name System. Redes de Computadores Prof. Leandro C. Pykosz

O protocolo HTTP. Você aprenderá: O que é e como funciona o protocolo HTTP. Quais são as partes de um pedido HTTP.

Mais sobre uso de formulários Site sem Ajax

MADALENA PEREIRA DA SILVA SLA Sociedade Lageana de Educação DCET Departamento de Ciências Exatas e Tecnológica

Programação para Internet I. 2. O protocolo HTTP. Nuno Miguel Gil Fonseca nuno.fonseca@estgoh.ipc.pt

ISO/IEC 12207: Gerência de Configuração

Manual do Painel Administrativo

4. Qual seria o impacto da escolha de uma chave que possua letras repetidas em uma cifra de transposição?

Conteúdo. Disciplina: INF Engenharia de Software. Monalessa Perini Barcellos. Centro Tecnológico. Universidade Federal do Espírito Santo

Um Driver NDIS Para Interceptação de Datagramas IP

Kerio Exchange Migration Tool

Professor: Macêdo Firmino Disciplina: Sistemas Operacionais de Rede

Projeto: Plataforma de Integração. Data: 01/08/2014

Microsoft Access XP Módulo Um

ADMINISTRAÇÃO DE SISTEMAS OPERACIONAIS SERVIÇOS IMPRESSÃO. Professor Carlos Muniz

Sistemas Distribuídos. Professora: Ana Paula Couto DCC 064

Manual Xerox capture EMBRATEL

Manual de Integração WebService

Protocolo de Sinalização SIP

INTRODUÇÃO: 1 - Conectando na sua conta

Guia rápido de uso de Web Services do NFS-e Easy

CONCEITOS INICIAIS. Agenda A diferença entre páginas Web, Home Page e apresentação Web;

Conceitos de relação de confiança

J820. Testes de interface Web com. HttpUnit. argonavis.com.br. Helder da Rocha

Manual de Integração. Tecnologia: WebServices SOAP XML. Área: CDC. Produto: CDC Pessoa Física NFE (RFB) Versão: 1.0. Autor: Angelo Bestetti Junior

MANUAL DE INSTALAÇÃO E CONFIGURAÇÃO. Motor Periférico Versão 8.0

Manual de Instalação PIMSConnector em Windows

O nome ANT é uma sigla para another neat tool (mais uma ferramenta organizada), segundo seu autor James Duncan Davidson.

Feature-Driven Development

Especificação de Requisitos

Mercado Eletrônico Instalação e Atualização MEConnect2

Como utilizar a central de gerenciamento VPN.

Manual de implementação da API SISeCommerce V Manual de implementação da API SISeCommerce V /21

Lista de Revisão. 3. Analise a afirmativa a seguir como verdadeira ou falsa e justifique.

Secure Client. Manual do Usuário. IPNv2. Secure Client IPNv2

Programação Orientada a Objetos com PHP & MySQL Cookies e Sessões. Prof. MSc. Hugo Souza

ACESSO E UTILIZAÇÃO DO OTRS

Manual QuotServ Todos os direitos reservados 2006/2007

1 REQUISITOS BÁSICOS PARA INSTALAR O SMS PC REMOTO

3. Explique o motivo pelo qual os protocolos UDP e TCP acrescentam a informação das portas (TSAP) de origem e de destino em seu cabeçalho.

BC CORREIO SISTEMA DE CORREIO ELETRÔNICO DO BANCO CENTRAL DO BRASIL. Manual do Web Service

Amadeus Pro Printer 5.1P275

BEM-VINDO AO dhl PROVIEW

Facebook. Java com o. Integrando Aplicações. Descubra como é fácil criar uma aplicação para rodar no Facebook. _capa

Manual Técnico de Utilização do Web Service de Administração do Código de Segurança do Contribuinte - CSC

Instalação: permite baixar o pacote de instalação do agente de coleta do sistema.

Para funcionamento do Netz, alguns programas devem ser instalados e alguns procedimentos devem ser seguidos. São eles:

Guia de Fatores de Qualidade de OO e Java

Prática da Disciplina de Sistemas Distribuídos Serviços Web IFMA DAI Professor Mauro Lopes C. Silva

MDaemon GroupWare. Versão 1 Manual do Usuário. plugin para o Microsoft Outlook. Trabalhe em Equipe Usando o Outlook e o MDaemon

Scriptlets e Formulários

Ajuda On-line - Sistema de Portaria. Versão 4.8.J

Guia do Administrador de Licenças de Usuários Autorizados do IBM SPSS Modeler

ÍNDICE 1.CONHECENDO OS APLICATIVOS NECESSÁRIOS PARA O FUNCIONAMENTO DO SISTEMA URANO INTEGRA...

Aplicação Prática de Lua para Web

7 Utilização do Mobile Social Gateway

Outlook XML Reader Versão Manual de Instalação e Demonstração UNE Tecnologia

Transcrição:

Guia da API WAP PUSH REST versão 1.0

Conteúdo 1 INTRODUÇÃO... 4 1.1 ALCANCE... 4 1.2 GLOSSÁRIO... 4 2 CONVENÇÕES GERAIS... 5 2.1 CONSIDERAÇÕES GERAIS DE UMA INTERFACE REST... 5 2.2 CONSIDERAÇÕES ESPECÍFICAS PARA A API REST DE WAP PUSH... 5 2.2.1 Considerações de Segurança... 7 3 DEFINIÇÃO DAS OPERAÇÕES... 9 3.1 ENVIO DE UMA MENSAGEM WAP PUSH... 9 3.1.1 Requisição... 9 3.1.2 RESPOSTA... 11 3.2 CONSULTA DO ESTADO DE ENVIO... 12 3.2.1 Requisição... 12 3.2.2 Resposta... 12 4 NAMESPACES... 14 5 DEFINIÇÃO DOS TIPOS DE DADOS... 15 5.1 ESTRUTURA DO PMessageType... 15 5.2 ESTRUTURA DO PMessageResultType... 16 5.3 ESTRUTURA DO PMessageDeliveryStatusPollType... 16 5.4 ESTRUTURA DO PMessageDeliveryStatusType... 17 5.5 ENUMERAÇÃO DO PushActionType... 17 5.6 ESTRUTURA DO DeliveryInformationType... 17 5.7 ENUMERAÇÃO DO DeliveryStatusType... 18 5.8 ENUMERAÇÃO DO AltType... 18 5.9 OPÇÃO UserIdType... 18 6 BIBLIOTECAS CLIENTE PARA USO DAS APIS... 20

6.1 CLIENTE JAVA... 20 6.1.1 Diretrizes de Programação... 20 6.1.2 Exemplo para o envio com o cliente WAP PUSH... 20 6.1.3 Pacotes do Cliente...2122 6.1.4 Pré-requisitos... 22 6.2 CLIENTE C#... 23 6.2.1 Diretrizes de Programação... 23 6.2.2 Exemplo para o envio com o cliente WAP PUSH... 23 6.2.3 Pacotes do Cliente... 24 6.2.4 Pré-requisitos... 24 6.3 CLIENTE PHP... 25 6.3.1 Dependências... 25 6.3.2 Diretrizes de Programação... 25 6.3.3 Exemplo de envio com o cliente WAP PUSH... 25 6.3.4 Pacotes do Cliente... 26 7 DETALHE DAS DESCRIÇÕES DE ERRO... 27 A. CONSIDERAÇÕES GERAIS... 28 A. 1. MÉTODOS HTTP... 28 A.1.1. POST... 28 A.1.2. GET... 28 A.1.3. PUT... 28 A.1.4. DELETE... 29 A.2. REPRESENTAÇÕES COMUNS... 29 A.2.1. JSON... 29 A.2.2. XML... 29 B. REFERÊNCIAS... 30

1 INTRODUÇÃO Este documento serve como guia inicial para que desenvolvedores utilizem a API REST que é responsável pelo envio de WAP PUSH da Plataforma de Desenvolvedores Vivo. As funcionalidades da API são o envio de WAP PUSH e a consulta do estado de envio de um WAP PUSH. Estas funcionalidades são expostas através de uma interface REST (REpresentational State Transfer) que expõe o uso por meio de simples requisições HTTP. 1.1 ALCANCE A API WAP Push da Plataforma de Desenvolvedores Vivo permite o envio de mensagens WAP Push somente para o BRASIL. 1.2 GLOSSÁRIO API: Application Programming Interface ID: Identifier HTTPS: HyperText Transfer Protocol Secure JSON: JavaScript Object Notation REST: Representational State Transfer SMS: Short Messaging Service URI: Uniform Resource Identifier URL: Uniform Resource Locator WSDL: Web Services Description Language XML: extended Markup Language Página 4 de 3030

2 CONVENÇÕES GERAIS 2.1 CONSIDERAÇÕES GERAIS DE UMA INTERFACE REST O REST (REpresentational States Transfer) é um estilo de arquitetura baseado nos seguintes princípios: Direcionabilidade. Os recursos são expostos através de URIs. Sem Estado. As requisições de recursos são independentes uma da outra. Conectividade. Os recursos podem incluir links para outros recursos. Interface uniforme. As operações permitidas são a obtenção, criação, alteração e eliminação de recursos utilizando o protocolo HTTP. A implementação destes pilares tem como resultado serviços RESTful baseados no protocolo HTTP que são independentes da linguagem, podem ser usados perante a presença de firewalls, as aplicações podem cacheá-las, são altamente escaláveis, etc. O REST tem como propósito a implementação de serviços leves, inteligíveis e facilmente implementáveis que se definem com base numa série de operações RESTful, que implica a troca de informações de acordo com os formatos de dados REST. 2.2 CONSIDERAÇÕES ESPECÍFICAS PARA A API REST DE WAP PUSH 1. A requisição de envio de WAP PUSH é uma requisição POST que se pode fazer com os seguintes Content-Types: application/xml application/json application/x-www-form-urlencoded (suportado, apesar de ser recomendado usar XML ou JSON) 2. A resposta a essa requisição irá no formato expresso na mesma, exceto quando a requisição seja url-encoded, no qual as respostas serão XML. 3. A requisição do PushMessageDeliveryStatus é uma requisição GET, na qual se indica o WAP PUSH a consultar através de um parâmetro indicado na URI que forma a requisição. Por padrão, a resposta vem em formato XML, mesmo que se possa pedir que a resposta esteja em formato JSON através de um parâmetro alt, incluído na URI que elabora a requisição. 4. Mapeamento de XML para JSON. Dado que o XML é o formato padrão utilizado na API de SMS, se incluem arquivos XSD que descrevem os dados necessários para invocar a API através de XML. Para passar estas representações para o formato JSON, apresentam-se as seguintes regras de aplicação geral: a. Os elementos XML que aparecem no mesmo nível hierárquico XML (tanto os elementos de primeiro nível como os que estão dentro do mesmo elemento XML pai), são mapeados para um conjunto de pares nome:valor dentro de um objeto JSON, como se descreve a seguir: Página 5 de 3030

i. Cada elemento XML que aparece apenas uma vez no mesmo nível hierárquico é mapeado para um par nome:valor individual. O nome é formado de acordo com o ponto b, enquanto o valor é formado de acordo com o ponto c. ii. iii. Elementos XML que apareçam mais de uma vez no mesmo nível hierárquico são mapeados para um único par nome:valor individual. O nome é formado de acordo com o ponto b, enquanto o valor é um JSON que contém um valor por cada ocorrência do elemento XML. O nome é formado de acordo com o ponto b, enquanto os valores são formados de acordo com o ponto c O nome e o valor dos objetos JSON irão entre aspas "". Além disso, qualquer representação JSON irá entre chaves {}, em concordância com a RFC de JSON. b. O nome do par nome:valor é o nome dos elementos XML (nome_elemento_xml:valor). O valor é fromado como se descreve a seguir: i. Quando o elemento XML não tem nem atributos nem elementos XML filhos, o valor é igual ao valor do elemento XML. No caso em que o elemento seja nulo (não tenha valor), se indicará pondo um valor null no JSON. ii. Quando o elemento XML tiver elementos-filho e/ou atributos, o valor é um objeto JSON que contém os seguintes pares nome:valor: Um par nome:valor para cada atributo, onde nome é o nome do atributo e valor é o valor do atributo. Um par nome:valor associado ao valor do elemento XML, onde nome é a string $t e valor é o valor do elemento XML. Nota: não existe uma regra específica sobre isto na RFC de JSON ou em json.org. Portanto, se selecionou a string $t tendo como base as regras do Google para conversão de feeds XML para JSON (http://code.google.com/intl/es/apis/gdata/json.html). Pares nome:valor associados a elementos XML filhos.estes pares nome:valor se formam de acordo com o ponto a. Dentro de JSON não é necessário refletir: i. O primeiro tag <?xml version="1.0" encoding="utf-8"?> ii. Declaração de namespaces ou schemalocations. Página 6 de 3030

Exemplo de transformação de XML a JSON. <Animals> <dog> <name attr="1234">rufus</name> <breed>labrador</breed> </dog> <dog> <name>marty</name> <breed>whippet</breed> <a/> </dog> <dog/> <cat name="matilda"/> <a/> </Animals> {"Animals": { "a": null, "cat": {"name": "Matilda"}, "dog": [ { "breed": "labrador", "name": { "$t": "Rufus", "attr": "1234" } }, { "breed": "whippet", "a": null, "name": "Marty" }, null ] }} 2.2.1 Considerações de Segurança O seguinte ponto detalha as considerações de segurança que se devem levar em conta nos aplicativos desenvolvidas para acessar a API de WAP PUSH. Os aplicativos devem incluir um Authorization Header em cada requisição HTTP. O cabeçalho conterá os seguintes dados: Authorization: SDPBasicAuth realm="sdpapis", consumer_key= "serviceid@spid", signature_method="md5", signature="md5(spid+sppassword+timestamp)", timestamp="yyyymmddhhmmss", version="0.1", token="accesstoken", requestor_id="msisdn", requestor_type="1" Os termos serviceid, spid e sppassword se obtém na página de informação do desenvolvedor, no portal da Plataforma de Desenvolvedores Vivo. O requestor_id é o MSISDN (número de telefone) do usuário em nome do qual o aplicativo Página 7 de 3030

invocará a API. O AccessToken é um conjunto de 8 carateres dentre os seguintes {a-z, A-Z, 0-9} que o usuário poderá obter e atualizar na seção Perfil -> Botão Editar -> Informações Pessoais -> Gerar Token do portal da Plataforma de Desenvolvedores Vivo. O aplicativo deve incluir o AccessToken no Authorization header para invocar a API em nome do usuário. Dado que o aplicativo deve incluir o requestor_id e token do usuário, é da responsabilidade do desenvolvedor solicitar estes dados ao usuário na forma que considere mais conveniente, antes de invocar a API. Um exemplo de um Authorization Header é o seguinte: Authorization: SDPBasicAuth realm="sdpapis", consumer_key= "35000001000001@35000001", signature_method="md5", signature="5b941f30e158d2af2df658dd5acca810", timestamp="20090902154157 ", version="0.1", token="1x3rs6n8", requestor_id="5213907550010", requestor_type="1" Quando uma requisição HTTP se realiza sem o Authorization Header ou com um formato incorreto, será recebida uma resposta de erro HTTP. No entanto, se o formato do Authorization Header é correto mas os valores contidos nela estão errados, a requisição será aceita mas a mensagem não será enviada. Esta situação poderá ser comprovada por meio da operação SMSDeliveryStatus (ver 3.2 CONSULTA DO ESTADO DE ENVIO). Página 8 de 3030

3 DEFINIÇÃO DAS OPERAÇÕES Neste capítulo se descrevem as operações de envio e consulta de recepção de mensagens. Através da API não só se podem enviar WAP Push como também se pode consultar o resultado da requisição. As operações disponíveis com o tipo de dados de entrada e saída são descritos no seguinte quadro: Operação Entrada Saída Send Push Message PMessageType PMessageTextResultType Get Push Message Delivery Status PMessageDeliveryStatusPoll Type PMessageDeliveryStatusType 3.1 ENVIO DE UMA MENSAGEM WAP PUSH 3.1.1 Requisição Operação Entrada HTTP Method URL Content-Type POST https://sdp.vivo.com.br/osg/unica-push-rest/pushmessage O formato de codificação é um dos seguintes: application/xml application/json application/x-www-form-urlencoded Alguns exemplos de requisições com diferentes Content-Type: Content-Type: application/json POST /osg/unica-push-rest/pushmessage HTTP/1.1 Content-Type: application/json Authorization: SDPBasicAuth realm="sdpapis", consumer_key="0100114100@000137", signature_method="md5", signature="e7a68ad0e32a923b21348058d2b8bcbe", timestamp="20091023184738", version="0.1", token="czzwlpps", requestor_id="551199998888", requestor_type="1" Host: sdp.vivo.com.br Content-Length: 281{"pMessage": { "address": {"phonenumber": "551199997777"}, "created": "2009-10-23T18:47:38", "paction": "signal-high", "targeturl": "http://www.vivo.com.br", "text": "Texto da mensagem" }} Content-Type: application/x-www-form-urlencoded Página 9 de 3030

POST /osg/unica-push-rest/pushmessage HTTP/1.1 Content-Type: application/x-www-form-urlencoded;charset=utf8 Authorization: SDPBasicAuth realm="sdpapis", consumer_key="0100114100@000137", signature_method="md5", signature="5c1e0474c30352a020629ca96340aa09", timestamp="20091023184928", version="0.1", token="czzwlpps", requestor_id="551199998888", requestor_type="1" Host: sdp.vivo.com.br Content-Length: 265 address.phonenumber=551199997777&created=2009-10- 23T18%3A49%3A28&text=Este+e+o+texto+da+mensagem &targeturl=http%3a%2f%2fwww.vivo.com.br&paction=signal-high Content-Type: application/xml POST /osg/unica-sms-rest/sms HTTP/1.1 Content-Type: application/xml Authorization: SDPBasicAuth realm="sdpapis", consumer_key="0100105600@000025", signature_method="md5", signature="cf753cb3173fc8f343c2b84efede3aed", timestamp="20100127120206", version="0.1", token="2sdo4gal", requestor_id="551975500112", requestor_type="1" Host: sdp.vivo.com.br Content-Length: 497 <?xml version="1.0" encoding="utf-8" standalone="no"?> <ns0:smstext xmlns:ns0="http://www.telefonica.com/unica/sms_bodies/v0_1_1_litmus_lat AM_03102009" xmlns:ns1="http://www.telefonica.com/unica/sms_types/v0_1_1_litmus_lata M_03102009" xmlns:ns2="http://www.telefonica.com/unica_commontypes/v0_1"> <ns1:address> <ns2:phonenumber>551395186417</ns2:phonenumber> </ns1:address> <ns1:message>este e o conteudo da mensagem</ns1:message> </ns0:smstext> POST /osg/unica-push-rest/pushmessage HTTP/1.1 Content-Type: application/xmlauthorization: SDPBasicAuth realm="sdpapis", consumer_key="0100114100@000137", signature_method="md5", signature="731cb5a3f5ba255bf5559487c799ce58", timestamp="20091023184548", version="0.1", token="czzwlpps", requestor_id="551199998888", requestor_type="1" Host: sdp.vivo.com.br Content-Length: 636 <?xml version="1.0" encoding="utf-8" standalone="no"?> <ns0:pmessage xmlns:ns0="https://www.telefonica.com/unica/wappush_bodies/v0_1" xmlns:ns1="http://www.telefonica.com/unica/wappush_types/v0_1_litmus_la TAM_03102009" xmlns:ns2="http://www.telefonica.com/unica_commontypes/v0_1"> <ns1:address> <ns2:phonenumber>551199997777</ns2:phonenumber> </ns1:address> <ns1:created>2009-10-23t18:45:48</ns1:created> <ns1:text>este e o texto da mensagem</ns1:text> <ns1:targeturl>http://www.vivo.com.br</ns1:targeturl> Página 10 de 3030

<ns1:paction>signal-high</ns1:paction> </ns0:pmessage> 3.1.2 RESPOSTA Operação Entrada HTTP Response Code Content-Type Header Location Header Body 201 Created application/json, caso a requisição tenha sido feita em JSON application/xml, caso a requisição tenha sido feita em XML ou em URLencoded Contém a URL que permite realizar a operação de consulta do estado de envio da mensagem Elemento PMessageResultType no formato indicado no cabeçalho Content-Type Caso ocorra algum erro relacionado com: spid ou serviceid inválidos sppassword inválido O aplicativo não tem permissões para utilizar a API Parâmetros inválidos Violação dos SLA Será respondido com um código de estado HTTP do tipo 4XX/5XX. No entanto, se ocorre um erro relacionado com: token inválido O MSISDN não tem permissões para utilizar a API Será respondido com um código de estado HTTP 201, mas ao consultar o estado do envio será obtido o valor DeliveryImpossible (ver 3.2 CONSULTA DO ESTADO DE ENVIO). Content-Type: application/json HTTP/1.1 201 Created Server: Apache-Coyote/1.1 Location: https://sdp.vivo.com.br:8443/osg/unica-push- REST/PushMessage/PMDeliveryStatus?messageId=10000910231648055084 Content-Type: application/json;charset=iso-8859-1 Content-Length: 52 Date: Fri, 23 Oct 2009 16:48:05 GMT {"pmessageresult":{"result":"10000910231648055084"}} Content-Type: application/xml HTTP/1.1 201 Created Server: Apache-Coyote/1.1 Location: https://sdp.vivo.com.br:8443/osg/unica-push- REST/PushMessage/PMDeliveryStatus?messageId=10000910231646144864 Content-Type: application/xml;charset=iso-8859-1 Content-Length: 225 Página 11 de 3030

Date: Fri, 23 Oct 2009 16:46:14 GMT <pmessageresult xmlns="https://www.telefonica.com/unica/wappush_bodies/v0_1" xmlns:v0="http://www.telefonica.com/unica/wappush_types/v0_1_litmus_lat AM_03102009"> <v0:result>10000910231646144864</v0:result> </pmessageresult> 3.2 CONSULTA DO ESTADO DE ENVIO 3.2.1 Requisição A URL necessária para a requisição de consulta se obtém no cabeçalho de localização incluído na resposta à operação SendPushMessage. Operação Entrada HTTP Method URL Body GET https://sdp.vivo.com.br/osg/unica-push-rest/pushmessage/pmdeliverystatus A requisição GET de consulta não inclui body, a informação necessária deve ser passada como parâmetro da consulta. Exemplo de uma requisição de consulta do Estado de Envio com resposta em XML GET /osg/unica-sms- REST/SMSDeliveryStatus?smsIdentifier=10000910151005185603 HTTP/1.1 Authorization: SDPBasicAuth realm="sdpapis", consumer_key="0100105600@000025", signature_method="md5", signature="4e787bc6a43561968224bd9acdfcbe3a", timestamp="20100127120206", version="0.1", token="2sdo4gal", requestor_id="551395755011", requestor_type="1" Host: sdp.vivo.com.br Exemplo de uma requisição de consulta do estado de envio com resposta em JSON: GET /osg/unica-push- REST/PushMessage/PMDeliveryStatus?messageId=10000910261030269761&alt=JS ON HTTP/1.1 Authorization: SDPBasicAuth realm="sdpapis", consumer_key="0100114100@000137", signature_method="md5", signature="5ca5a10979088a9ad84475152dc4f569", timestamp="20091026112942", version="0.1", token="czzwlpps", requestor_id="551199998888", requestor_type="1" Host: sdp.vivo.com.br 3.2.2 Resposta Operação Entrada HTTP Response Code Content-Type Header Body 200 OK application/json application/xml (por padrão) Um elemento do tipo PMessageDeliveryStatusType indicado no Página 12 de 3030

Operação Entrada formato expresso no Content-Type Exemplo de uma resposta em JSON HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Content-Type: application/json;charset=iso-8859-1 Content-Length: 126 Date: Thu, 15 Oct 2009 10:14:05 GMT {"smsdeliverystatus":{"smsdeliverystatus":{"address":{"anyuri":"tel:+55 1385186417"},"deliveryStatus":"DeliveredToTerminal"}}} HTTP/1.1 200 OK ver: Apache-Coyote/1.1 Content-Type: application/json;charset=iso-8859-1 Content-Length: 50 Date: Mon, 26 Oct 2009 10:30:27 GMT {"pmessagedeliverystatus":{"deliverystatus":{"address":{"anyuri":"tel:+ 551199997777"},"deliveryStatus":"DeliveredToTerminal"}}} Exemplo de uma resposta em XML HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Content-Type: application/xml;charset=iso-8859-1 Content-Length: 520 Date: Mon, 26 Oct 2009 10:21:06 GMT <pmessagedeliverystatus xmlns="https://www.telefonica.com/unica/wappush_bodies/v0_1"> <NS2:deliveryStatus xmlns:ns2="http://www.telefonica.com/unica/wappush_types/v0_1_litmus_la TAM_03102009" xmlns:ns1="https://www.telefonica.com/unica/wappush_bodies/v0_1"> <NS2:address> <NS3:anyUri xmlns:ns3="http://www.telefonica.com/unica_commontypes/v0_1">tel:+55119 9997777</NS3:anyUri> </NS2:address> <NS2:deliveryStatus>DeliveryImpossible</NS2:deliveryStatus> </NS2:deliveryStatus> </pmessagedeliverystatus> Página 13 de 3030

4 NAMESPACES Os tipos de dados vêm definidos no seguinte namespace: http://www.telefonica.com/unica/wappush_types/v0_1_litmus_latam_03102009 Os elementos superiores utilizados nos corpos das requisições e respostas REST vêm definidos no seguinte namespace: http://www.telefonica.com/unica/wappush_bodies/v0_1_litmus_latam_03102009 Os tipos de dados comuns para todas as APIs vêm definidos no seguinte namespace: http://www.telefonica.com/unica_commontypes/v0_1 Outros tipos de dados comuns adotados de ParlayX vêm definidos no seguinte namespace: http://www.csapi.org/schema/parlayx/common/v3_1 Página 14 de 3030

5 DEFINIÇÃO DOS TIPOS DE DADOS Neste capítulo mostram-se definições dos tipos de dados utilizados por esta API. As seguintes considerações devem ser tidas em conta: As definições são mapeamentos diretos para XML Schemas A definição destes tipos de dados está baseada em GSMA OneAPI [3] e ParlayX 3.1 [2]. Em alguns casos, o tipo de dado corresponde diretamente a um tipo de dado definido em ParlayX. Portanto, nos esquemas proporcionados importam-se tipos de dados de ParlayX. 5.1 ESTRUTURA DO PMessageType Informação para o envio de um WAP PUSH. Parâmetro Tipo Elemento Opcional Descrição address uct:useridtype [1..unbounded] Não Lista de endereços para os quais se enviarão a mensagem. IdToken e valores de IP não são aceitos created xsd:datetime Não Este atributo se pode utilizar para especificar a data e o momento associado à criação ou última alteração do conteúdo indicado na target URL, que pode diferir da data e do tempo em que a mensagem foi criada. text xsd:string Não Informação que acompanha a URL push targeturl xsd:anyuri Sim Este atributo especifica a URI utilizada para acessar o serviço. Se este campo for vazio, ou se omitir, a mensagem corresponde a uma notificação (nenhum serviço pode ser iniciado). Pode estar vazio. paction PushActionType Sim Este atributo pode conter um texto especificando a ação a tomar quando se recebe a mensagem Os possíveis valores são signal-none signal-low signal-medium signal-high delete Por default o valor signal-medium é inserido, se nada for preenchido. A validade deste parâmetro depende do terminal. A seguir se detalha o significado dos elementos que compõem uma mensagem WAP PUSH: Text: o conteúdo plano da mensagem. Pode ter uma URL associada que é visitada quando o usuário seleciona o texto ou apenas ter texto (notificações planas). TargetURL: a URL do serviço que pode ir com a mensagem de texto push. Página 15 de 3030

Action: modela o nível de intrusão das mensagens push em cliente de usuário final. Tem cinco níveis possíveis, mesmo que apenas três deles (baixo, médio e alto) afetam no que se relaciona à apresentação das mensagens push ao usuário. Action= signal-low A mensagem deve ser adiada sem a intervenção do usuário Action= signal-medium A mensagem se deve apresentar o antes possível de maneira não intrusiva. Action= signal-high A mensagem se deve apresentar o antes possível de maneira não intrusiva, ou antes se se considera apropriado (o qual pode dar lugar a um comportamento intrusivo). Esta decisão se pode basear em preferências do usuário ou depender da implementação. Created: este atributo se utiliza para determinar o tempo de criação da mensagem push, que combinado com o valor do TargetURL proporciona a informação necessária para ser substituído. Não representa o tempo da mensagem enviada mas sim o tempo do conteúdo. Uma mensagem push recebida que contenha uma targeturl idêntica a qualquer mensagem mais antiga deve substituir a antiga. 5.2 ESTRUTURA DO PMessageResultType Resposta da operação REST Send Push Message. Contém informação para a consulta do estado de entrega. Parâmetro Tipo Elemento Opcional Descrição result xsd:string Não É um identificador correlativo com a mensagem PUSH enviado utilizado numa operação getpushmessagedeliverystatustype 5.3 ESTRUTURA DO PMessageDeliveryStatusPollType Utilizado como entrada para a consulta ou recepção sincrônica do estado de entrega de um WAP PUSH. Parâmetro Tipo Elemento Opcional Descrição messageid xsd:string Não Identificador relacionado com estado de entrega da consulta. alt uct:alttype Sim Parâmetro opcional que serve para indicar que a consulta se realiza em formato JSON. (alt=json) Página 16 de 3030

Deve-se ter em conta que o tipo de dado PMessageDeliveryStatusPollType se utiliza nas operações GET e, portanto, deve ser passado na URI das requisições. Desta maneira, não se utiliza XML nem JSON para a codificação deste tipo de dados. 5.4 ESTRUTURA DO PMessageDeliveryStatusType A estrutura do PMessageDeliveryStatusType está composta pelos seguintes parâmetros: Parâmetro Tipo Elemento Opcional Descrição WAP deliverystatus DeliveryInformationType [0..unbounded] Não Descreve as variações do estado de entrega da mensagem WAP PUSH. Os valores possíveis são DeliveredToNetwork DeliveryUncertain DeliveryImpossible MessageWaiting DeliveredToTerminal 5.5 ENUMERAÇÃO DO PushActionType Especifica a ação a que se vai tomar quando a mensagem push se recebe no terminal. Em consonância com os possíveis valores. Valor Descrição signal-low signal-medium signal-high delete signal-none signal-low Mensagem adiada Apresentado ao usuário quando for possível (de maneira não- intrusiva). Apresentado ao usuário (possivelmente inclusive interrompendo serviços em execução) Eliminação de mensagens idênticas prévias O comportamento do cliente não está especificado Mensagem adiada 5.6 ESTRUTURA DO DeliveryInformationType Informação da entrega do WAP PUSH Nota: tirado de ParlayX WAP PUSH API [2] Parâmetro Tipo Elemento Opcional Descrição Address uct:useridtype Não Indica o endereço de destino relacionado com a notificação. Página 17 de 3030

Parâmetro Tipo Elemento Opcional Descrição deliverystatus DeliveryStatusType Não Indica o resultado da entrega para os endereços de destino. description xsd:string Sim Utilizado juntamente com o estado de entrega (ite.deliveryimpossible) para proporcionar informação adicional. 5.7 ENUMERAÇÃO DO DeliveryStatusType Lista de valores possíveis do estado de Entrega. Nota: tirados de Parlay X WAP PUSH API Valor DeliveredToNetwork DeliveryUncertain DeliveryImpossible MessageWaiting DeliveredToTerminal DeliveryNotificationNotSupported Descrição Entrega à rede com sucesso Estado de entrega desconhecido. (ex: por ter sido enviado para outra rede) Entrega impossível, a mensagem não pôde ser entregue antes de expirar A mensagem está em fila de espera para ser entregue. Este é um estado temporário, pendente de transição para outro estado mencionado. Entrega bem-sucedida Impossível fornecer a notificação de entrega. Utilizado para indicar que a recepção de entrega para o endereço especificado numa operação SendMessage não está suportada. Nota: Atualmente esta API não suporta relatórios de envio, por isso sempre receberá o valor DeliveryNotificationNotSupported. 5.8 ENUMERAÇÃO DO AltType Parâmetro para solicitar uma resposta em formato JSON. Parâmetro Descrição JSON O formato do conteúdo da resposta deve ser JSON 5.9 OPÇÃO UserIdType Parâmetro Tipo Elemento Opcional Descrição Página 18 de 3030

Parâmetro Tipo Elemento Opcional Descrição phonenumber E164Type Sim Número de telefone anyuri xsd:anyuri Sim Qualquer URI ipaddress IpAddressType Sim Endereço IP alias AliasType Sim Alias otherid OtherIdType Sim Qualquer outro tipo de identidade de usuário Página 19 de 3030

6 BIBLIOTECAS CLIENTE PARA USO DAS APIS 6.1 CLIENTE JAVA 6.1.1 Diretrizes de Programação Geralmente é definida uma interface principal para cada API, que define as operações REST do cliente permitidas para o correspondente serviço. Através de um mecanismo de factories se oferecem implementações destas interfaces, que funcionam como clientes REST. Estes clientes implementam operações definidas para cada API utilizando um modelo de dados Java em consonância com os tipos de dados definidos nas APIs. A interface inplementada pelos clientes WAP PUSH é a seguinte: WAP PUSH API Client: es.tid.unica.rest.wappush.wappushclient A factory que deve ser usada para obter uma instância da classe cliente para WAP PUSH é a seguinte: WAP PUSH API Client Factory: es.tid.unica.rest.wappush.wappushclientfactory 6.1.2 Exemplo para o envio com o cliente WAP PUSH O exemplo seguinte mostra o uso do cliente para o uso da API REST de WAP PUSH: Em primeiro lugar se realiza a construção do objeto cliente (WAPPushClient), através do uso de uma factory (WAPPushClientFactory) A seguir se configura o cliente com os dados necessários, tanto para o estabelecimento da conexão com o servidor (incluindo a utilização de um proxy, se é necessário, bem como o endpoint no qual se encontra o serviço que se vai invocar), como para permitir a autenticação do cliente. Esta situação supõe especificar os elementos que formam as credenciais de segurança que serão utilizadas. Uma vez feito o anterior, já é possível efetuar o envio de uma mensagem, utilizando o método sendpushmessage. Esse método abrange como parâmetros a mensagem em si, construída utilizando as classes proporcionadas pela API, que seguem exatamente as especificações de tipos de dados explicadas nas seções anteriores, bem como a codificação empregue. Após o envio da mensagem push se obtém como resposta um objeto, da classe SendPushMessageResult, que contém o resultado da operação de envio, incluindo a URI que poderá ser utilizada para consultar o delivery status dessa mensagem. import es.tid.unica.rest.encoding; import es.tid.unica.rest.wappush.sendpushmessageresult; import es.tid.unica.rest.wappush.wappushclient; import es.tid.unica.rest.wappush.wappushclientfactory; import es.tid.unica.types.common.anyuri; import es.tid.unica.types.common.datetimetype; import es.tid.unica.types.common.e164type; import es.tid.unica.types.common.stringtype; import es.tid.unica.types.common.useridtype; import es.tid.unica.types.wappush.pmessagedeliverystatustype; import es.tid.unica.types.wappush.pmessagetype; import es.tid.unica.types.wappush.pushactiontype;... Página 20 de 3030

// General configuration data String base_uri = " https://sdp.vivo.com.br/osg/unica-push-rest"; String proxy_host = null; // No proxy is used int proxy_port = 80; // Security configuration data String service_id = "0100105600"; String sp_id = "000025"; String sp_password = "123456"; String access_token = "2SDO4gAL"; String requestor_id = "551199995555"; int requestor_type = 1; String receipt_msisdn = "551199997777"; String message_text = "This is the text to be sent"; try { // Creating the client WAPPushClient client = WAPPushClientFactory.getInstance().createWAPPushClient(base_uri, proxy_host, proxy_port); // Initialize the client client.setserviceid(service_id); client.setspid(sp_id); client.setsppassword(sp_password); client.setaccesstoken(access_token); client.setrequestorid(requestor_id); client.setrequestortype(requestor_type); // Enable authentication client.enableauthentication(true); //----------------------------------------------- // Send a push message. //----------------------------------------------- // 1. Build the message PMessageType pmessage = new PMessageType(); // 1.1 Receipt address UserIdType address = new UserIdType(); address.setphonenumber(new E164Type(receipt_msisdn)); pmessage.addaddress(address); // 1.2 Created datetime DateTimeType dtime = new DateTimeType(new GregorianCalendar()); pmessage.setcreated(dtime); // 1.3 Text pmessage.settext(new StringType(message_text)); // 1.4 Target URL (optional) AnyUri target_url = new AnyUri(new URI("http://www.telefonica.es")); pmessage.settargeturl(target_url); // 1.5 PAction PushActionType paction = new PushActionType(); paction.setsignalhigh(); pmessage.setpaction(paction); // 2. Send the message. SendPushMessageResult result = client.sendpushmessage(pmessage, Encoding.APPLICATION_XML); System.out.println("The result of the sendpushmessage opeation is " + result); //----------------------------------------------- //----------------------------------------------- // Retrieve the delivery status of the sent message. //----------------------------------------------- PMessageDeliveryStatusType status = client.getpushmessagedeliverystatus(result.getlocationheader().tostring(), null); System.out.println("Result of getpushmessagedeliverystatus = " + status); } catch (Exception e) { e.printstacktrace(); } 6.1.3 Pacotes do Cliente A biblioteca Java de cliente WapPush é formada pelos seguintes pacotes: Página 21 de 3030

Pacotes es.tid.unica.rest.wappush es.tid.unica.types.common es.tid.unica.types.parlayx.common es.tid.unica.types.wappush Descrição Pacote que contém as classes principais para o cliente WAP PUSH REST API. Pacote que contém os tipos de dados principais para as mensagens e os parâmetros utilizados pelas APIs. Este pacote contém os tipos de dados básicos de ParlayX, que podem ser utilizados nas APIs Pacote que contém os tipos de dados específicos da API de WAP PUSH 6.1.4 Pré-requisitos Para o funcionamento correto da biblioteca de cliente de Java de SMS é necessário ter instalada a versão 1.5 ou superior do JRE (Java Runtime Environment) ou JDK (Java Development Kit). Também é necessário utilizar as bibliotecas contidas nos arquivos.jar situados no diretório lib da distribuição do cliente Java. Página 22 de 3030

6.2 CLIENTE C# 6.2.1 Diretrizes de Programação É definida uma classe factory para cada API atuando como criador de clientes REST. A partir de uma instância única da factory se obtém um cliente para a API ao qual pertence, dotado com mais ou menos dados iniciais dependendo da operação de criação utilizada. O cliente obtido, quando do fornecimento de diferentes implementações, é oferecido em forma de interface da linguagem C#. A interface obtida a partir do factory se comportará como um cliente REST. Estes clientes implementam as operações definidas para cada API utilizando um modelo de dados C# em consonância com os tipos de dados definidos nas APIs. A factory e a interface do cliente SMS para a API REST são os seguintes: WAP PUSH Client Factory: es.tid.unica.rest.wappush.wappushclientfactory WAP PUSH Client Interface API: es.tid.unica.rest.wappush.iwappushclient 6.2.2 Exemplo para o envio com o cliente WAP PUSH O exemplo seguinte mostra o uso do cliente para o uso da API REST de WAP PUSH: try { //1.- create a client instance from WAP Push factory IWAPPushClient wappushclient = WAPPushClientFactory.GetInstance(). CreateWAPPushClient(baseUri, proxyhost, proxyport); //2.- set authentication credentials wappushclient.credentials.serviceid = "0100105700"; wappushclient.credentials.spid = "000025"; wappushclient.credentials.sppassword = "123456"; wappushclient.credentials.requestorid = "551199994444"; wappushclient.credentials.requestortype = 1; wappushclient.credentials.accesstoken = "20MD38QV"; //3.- Create a new Push Message PMessageType pushmessage = new PMessageType(); //4.- Create and add destination addresses (one address at least) UserIdType firstaddress = new UserIdType(); firstaddress.phonenumber = new E164Type("551199995555"); UserIdType secondaddress = new UserIdType(); secondaddress.phonenumber = new E164Type("551199996666"); pushmessage.addaddress(firstaddress); pushmessage.addaddress(secondaddress); //5.- Set created date (mandatory) pushmessage.created = new DateTimeType(DateTime.Now); //6.- Set message text content pushmessage.text = new StringType("Push message text content to send"); //7.- Set target URL (optional) pushmessage.targeturl = new AnyUri(new Uri("http://wap.push.target.url")); //8.- Set a push action (optional) PushActionType paction = new PushActionType(); paction.setsignalhigh(); pushmessage.paction = paction; //9.- Send the push message SendPushMessageResult result = wappushclient.sendpushmessage(pushmessage, Encoding.APPLICATION_XML); Página 23 de 3030

//10.- use result as you need Console.WriteLine("Send push message, Result produced: {0}", result.messageresult.result.tostring()); Console.WriteLine("HTTP Location header received in response: {0}", result.locationheader.tostring()); return result.locationheader.tostring(); } catch (Exception ex) { Console.Error.WriteLine(ex.Message); throw; } 6.2.3 Pacotes do Cliente Os pacotes são descritos a seguir: Pacotes es.tid.unica.rest.wappush es.tid.unica.types.common es.tid.unica.types.parlayx.common es.tid.unica.types.wappush Descrição Pacote que contém as classes principais para o cliente WAP PUSH REST API. Pacote que contém os tipos de dados principais para as mensagens e os parâmetros utilizados pelas APIs. Este pacote contém os tipos de dados básicos de ParlayX, que podem ser utilizados nas APIs Pacote que contém os tipos de dados específicos da API de WAP PUSH 6.2.4 Pré-requisitos Para o funcionamento correto das APIs C# são necessários o seguintes pré-requisitos: Sistema Operacional Windows XP Service Pack 2 (ou superior) ou Windows Vista Microsoft.NET Framework 3.5, disponível para baixar gratuitamente em http://www.microsoft.com/downloads Esta biblioteca não foi concebida para outros ambientes como Mono ou Portable.NET. Página 24 de 3030

6.3 CLIENTE PHP 6.3.1 Dependências PHP 5.2.6 PHP5-CURL 5.2.6 CURL 7.18.2 6.3.2 Diretrizes de Programação É definida uma classe para cada API atuando como um cliente REST. Estes clientes implementam as operações definidas para cada API utilizando como referência os tipos de dados definidos nas APIs. As classes do cliente de WAP Push para a API REST são as que se seguem (uma classe para cada tipo de codificação): wappushrestlibraryxml.php wappushrestlibraryjson.php wappushrestlibraryurlenc.php Esta biblioteca se provou nos seguintes sistemas operacionais: CentOs 5, Fedora 11, Ubuntu Jaunty, Ubuntu Karmic, Debian Lenny, Windows 7 e Windows XP. 6.3.3 Exemplo de envio com o cliente WAP PUSH O exemplo seguinte mostra o uso do cliente para a utilização da API REST de WAP PUSH: <?php // Select only one of this include_once "./wappushrestlibraryxml.php"; $pushclient = new pushrestclient($spid,$serviceid,$sppassword,$token,$requestor_id,$apiendpoint); //Set up mandatory parameters $address["phonenumber"]=" 551199997777"; $created = date("y-m-d\\th:i:s"); $text = "This is the Message"; //Send wap push message $result = $pushclient->sendpushmessage($address,$created,$text); //Checking response $protocol=explode (":",strtolower($result)); if ($protocol[0] == 'http' $protocol[0] == 'https'){ //Getting Delivery Status $deliverystatus = $pushclient->getpushmessagedeliverystatus($result); echo $deliverystatus; } else { //An error ocurred echo $result; }?> Página 25 de 3030

6.3.4 Pacotes do Cliente Os pacotes são descritos a seguir: Pacotes wappushrestlibraryxml.php wappushrestlibraryjson.php wappushrestlibraryurlenc.php Descrição Pacote que contém a classe principal para o cliente WAP PUSH REST API com codificação XML. Pacote que contém a classe principal para o cliente WAP PUSH REST API com codificação JSON. Pacote que contém a classe principal para o cliente WAP PUSH REST API com codificação URL encode. Página 26 de 3030

7 DETALHE DAS DESCRIÇÕES DE ERRO As operações descritas neste documento podem devolver uma série de códigos de erro HTTP, como se explica a seguir. Caso ocorra algum erro relacionado com: spid ou serviceid inválidos sppassword inválido O aplicativo não tem permissões para utilizar a API Parâmetros inválidos Violação dos SLA Será respondido com um código de estado HTTP do tipo 4XX/5XX. No entanto, se ocorre um erro relacionado com: token não válido O MSISDN não tem permissões para utilizar a API Será respondido com um código de estado HTTP 201, mas quando consultar o estado do envio irá obterá o valor DeliveryImpossible. Página 27 de 3030

A. CONSIDERAÇÕES GERAIS Nesta seção são descritos elementos necessários para o funcionamento normal da API REST WAP PUSH: Métodos HTTP: que constituem as operações RESTful, de acordo com os princípios REST. Representações comuns. A. 1. MÉTODOS HTTP As seguintes descrições foram extraídas da RFC de HTTP 1.1. A.1.1. POST Utiliza-se o método POST para pedir que o servidor de origem aceite a entidade contida na requisição como um novo recurso identificado pela URI. O POST permite um método uniforme que engloba as seguintes funções: Anotação de recursos existentes. Postar uma mensagem num forum, grupo de notícias, listas de correio, ou grupo semelhante de artigos. Fornecer um bloco de dados, como por exemplo o resultado do envio de um formulário, para que seja processado. Estender um banco de dados através do acréscimo de uma operação. A funcionalidade executada pelo método POST é determinada pelo servidor e depende da Request-URI. A entidade postada está subordinada a essa URI da mesma maneira que o arquivo está subordinado ao diretório que o contém, que um artigo de notícias está subordinado a um grupo de notícias ao que está postado, como um registro está subordinado a um banco de dados. A.1.2. GET O método GET tenta extrair qualquer informação (na forma de uma entidade) identificada por uma Request-URI. Se a Request-URI se refere a um processo que gera dados, a resposta deve ser um dado produzido como entidade e não o texto origem do processo, a não ser que o texto seja a saída do processo. A.1.3. PUT O método PUT solicita que a entidade contida seja armazenada abaixo da Request-URI proporcionada. Se a Request-URI se refere a um recurso existente, a entidade contida deve ser considerada como uma versão modificada do recurso residente no servidor. Se a Request-URI não aponta para um recurso existente, e a URI é capaz de ser definida como um novo recurso pelo agente solicitante, o servidor de origem pode criar o recurso com essa URI. Página 28 de 3030

A.1.4. DELETE O método Delete solicita que o servidor de origem elimine o recurso identificado com a Request- URI. Este método pode ser rescrito por intervenção humana (ou por outros métodos) no servidor de origem. O cliente não pode garantir que a operação tenha sido executada com sucesso, inclusive se o código de estado devolvido a partir da origem indica que a ação foi completada com sucesso. No entanto, o servidor não deve indicar uma resposta satisfatória a não ser que, no momento em que a resposta é entregue, tente eliminar o recurso ou movê-lo para uma localização inacessível. A.2. REPRESENTAÇÕES COMUNS A.2.1. JSON As requisições POST podem incluir dados em formato JSON. As respostas devem incluir o corpo em formato JSON, se correspondem a requisições POST incluídas em formato JSON ou se correspondem a requisições GET incluídas com o parâmetro 'alt=json'. Nestes casos, deve estar presente na resposta o header Content-Type:application/json. A.2.2. XML As requisições POST podem incluir dados em formato XML. Nestes casos é utilizado um corpo application/xml. Este formato XML deve cumprir com as especificações do XML Schema. As respostas devem incluir um corpo do XML caso a correspondente petição POST inclua dados em formato XML ou se a correspondente petição GET não incluía o parâmetro 'alt=json'. Nestes casos, deve estar presente na resposta o header Content-Type: application/xml. Página 29 de 3030

B. REFERÊNCIAS [1] 3GPP TS 29.199-1: "Open Service Access (OSA); Parlay X Web Services; Part 1: Common" [2] 3GPP TS 29.199-5: "Open Service Access (OSA); Parlay X Web Services; Part 5: Multimedia Messaging". [3] GSMA OneAPI, http://gsma.securespsite.com/access/default.aspx [4] RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1 [5] W3C Recommendation (26 June 2007): "Web Services Description Language (WSDL) Version 2.0 Part 2: Adjuncts, https://www.w3.org/tr/2007/rec-wsdl20-adjuncts- 20070626/#_http_binding_default_rule_method [6] W3C Recommendation (2 May 2001): "XML Schema Part 2: Datatypes", http://www.w3.org/tr/2001/rec-xmlschema-2-20010502/. Página 30 de 30