Restful – Part 2
Recursos
Um recurso é nada exposta pelo sistema que tem uma identidade. Recursos
oferecem uma maneira de adaptar o domínio de aplicação aos clientes web.
Uma imagem, uma planilha, um serviço ou uma coleção de outros recursos
são alguns exemplos de recursos. Os recursos são obtidos ou enviar usando
uma certa representação (XML, JSON, etc.). Nós lidamos com
representações de recursos, e não com os próprios recursos, seguindo a
ideia de "Pass-by-value". Após a definição REST anterior, os recursos
representam os documentos que estão sendo transferidos através da rede
para começar o trabalho feito. estado de recursos é uma preocupação do
lado do servidor, uma vez que representa o estado de domínio, clientes só
buscar ou enviar representações de recursos para o progresso do estado do
aplicativo. Por outro lado, o estado da aplicação é uma preocupação do
lado do cliente, uma vez que representa o progresso para um objectivo
particular aplicação. Os recursos devem ser nomeados como substantivos,
pois representam conceitos no domínio de um sistema particular e são
identificados usando URIs.
URIs (Uniform Resource Identifier)
URIs diferenciar um recurso de outro. Para acessar e manipular um
recurso, ele precisa ter pelo menos um endereço. Eles são compostos por
uma série protocolo + + caminho. Os clientes não devem ser acoplados a
URIs específicos de recursos como eles podem ser alterados a critério do
servidor. Este é o lugar onde hipermídia tem as maiores vantagens, uma
vez que oferece uma maneira de separar clientes de URIs específicos e
adicionar semântica para o protocolo de aplicação.
Hipermídia
Hipermídia informa o cliente sobre o que ele pode fazer em seguida,
através do uso de controles de hipermídia (links e formas) nas respostas, eo
URI específica para fazê-lo. O formato hipermídia concreto para uma
determinada aplicação é definida no tipo de aplicativo Media. elos
hipermídia são compostas por um atributo href que especifica o URI para
acessar o recurso vinculado e um atributo rel que define o significado da
relação, portanto, acrescentando semântica para as transições de estado na
aplicação. O uso de links permite que o servidor para anunciar novos
recursos, incluindo novas ligações nas respostas sem quebrar os clientes
existentes. Enquanto o servidor manter ligações previamente definidas nas
respostas, os clientes seriam capazes de segui-los assim como eles eram
antes do novo estado foi adicionado. Os clientes que só necessitam de ser
atualizadas se eles precisam acessar o novo estado. Outra vantagem
hipermídia é que ele introduz descoberta, fornecendo uma maneira de fazer
um protocolo de descoberta e autodocumentado.
Os clientes começam a interagir com o aplicativo por meio de uma URL
fixa, e a partir daí todas as outras ações acontecem pelo cliente seguindo os
links , formatado com o tipo de mídia e fornecido pelo servidor em cada
resposta.
tipos de mídia e links definir o contrato entre o servidor de aplicativos eo
cliente. O cliente interage com o sistema , navegando o estado do aplicativo
utilizando as ligações . Isto é o que HATEOAS ( Hipermídia como motor
do estado do aplicativo ) realmente significa.
Hipermedia ( para além dos elementos já definidos ) é o que significa
REST realmente .
Abaixo um exemplo de um requisição Rest para retornar uma validação
Aoath do salesforce:
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:http="http://www.mulesoft.org/schema/mule/http"
xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/trackin
g" xmlns="http://www.mulesoft.org/schema/mule/core"
xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xmlns:spring="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.mulesoft.org/schema/mule/http
http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core
http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/ee/tracking
http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-
ee.xsd">
<sub-flow name="getAuthorizationToken">
<http:request config-ref="HTTP_Request_Configuration"
path="/services/oauth2/token" method="POST"
doc:name="RequestAuthorization">
<http:request-builder>
<http:query-param paramName="grant_type"
value="password"/>
<http:query-param paramName="client_id"
value="3MVG9Nc1qcZ7BbZ0.lrUdTc6imEmpmeMblw6fJZ_TySlFWN3
AFZ.Wbre4W01j_RkzLlqlGTqjRZLwMuMOL.qZ"/>
<http:query-param paramName="client_secret"
value="7205123458111539520"/>
<http:query-param paramName="username"
value="teste@teste.com.br"/>
<http:query-param paramName="password"
value="Salesforce2!"/>
</http:request-builder>
<http:success-status-code-validator values="0..599"/>
</http:request>
<set-payload value="#[json:access_token]"
doc:name="extractTokenFromResponse"/>
</sub-flow>
<flow name="executeWaveQuery" processingStrategy="synchronous">
<enricher target="#[flowVars.authorizationToken]"
doc:name="Message Enricher">
<processor-chain doc:name="Processor Chain">
<flow-ref name="getAuthorizationToken"
doc:name="getAuthorizationToken"/>
</processor-chain>
</enricher>
<http:request config-ref="HTTP_Request_Unilever"
path="/services/data/v36.0/wave/query" method="POST"
doc:name="QueryWave">
<http:request-builder>
<http:header headerName="Authorization" value="OAuth
#[flowVars.authorizationToken]"/>
<http:header headerName="Content-Type"
value="application/json"/>
</http:request-builder>
</http:request>
<logger level="INFO" doc:name="Logger"/>
</flow>
<flow name="getSalesChannel" processingStrategy="synchronous">
<set-payload value="${query.get_sales_channel}"
doc:name="setQueryGetSalesChannel"/>
<flow-ref name="executeWaveQuery"
doc:name="executeWaveQuery"/>
<logger message="#[message.payloadAs(java.lang.String)]"
level="INFO" doc:name="Logger"/>
</flow>
<flow name="getImpactedStore" processingStrategy="synchronous">
<set-payload value="${query.get_impacted_store}"
doc:name="setQueryGetImpactedStore"/>
<logger level="INFO" doc:name="Get Impacted Store SAQL"/>
<flow-ref name="executeWaveQuery"
doc:name="executeWaveQuery"/>
</flow>
<flow name="getECOTarget" processingStrategy="synchronous">
<set-payload value="${query.get_eco}"
doc:name="setQueryGetOrderInvoiceECO"/>
<logger message="SAQL -------&gt;
#[message.payloadAs(java.lang.String)]" level="INFO" doc:name="Get
ECO SAQL"/>
<flow-ref name="executeWaveQuery"
doc:name="executeWaveQuery"/>
</flow>
<flow name="get_orderInvoice_dataSet">
<set-payload value="${query.purge_orderInvoice}" doc:name="Set
Payload"/>
<logger message="SAQL -------&gt;
#[message.payloadAs(java.lang.String)]" level="INFO"
doc:name="Logger"/>
<flow-ref name="executeWaveQuery"
doc:name="executeWaveQuery"/>
<flow-ref name="dms_purge_orderInvoice_Flow"
doc:name="dms_purge_orderInvoice_Flow"/>
</flow>
</mule>

Restful Introdução com exemplo - Part 2

  • 1.
    Restful – Part2 Recursos Um recurso é nada exposta pelo sistema que tem uma identidade. Recursos oferecem uma maneira de adaptar o domínio de aplicação aos clientes web. Uma imagem, uma planilha, um serviço ou uma coleção de outros recursos são alguns exemplos de recursos. Os recursos são obtidos ou enviar usando uma certa representação (XML, JSON, etc.). Nós lidamos com representações de recursos, e não com os próprios recursos, seguindo a ideia de "Pass-by-value". Após a definição REST anterior, os recursos representam os documentos que estão sendo transferidos através da rede para começar o trabalho feito. estado de recursos é uma preocupação do lado do servidor, uma vez que representa o estado de domínio, clientes só buscar ou enviar representações de recursos para o progresso do estado do aplicativo. Por outro lado, o estado da aplicação é uma preocupação do lado do cliente, uma vez que representa o progresso para um objectivo particular aplicação. Os recursos devem ser nomeados como substantivos, pois representam conceitos no domínio de um sistema particular e são identificados usando URIs. URIs (Uniform Resource Identifier) URIs diferenciar um recurso de outro. Para acessar e manipular um recurso, ele precisa ter pelo menos um endereço. Eles são compostos por uma série protocolo + + caminho. Os clientes não devem ser acoplados a URIs específicos de recursos como eles podem ser alterados a critério do servidor. Este é o lugar onde hipermídia tem as maiores vantagens, uma vez que oferece uma maneira de separar clientes de URIs específicos e adicionar semântica para o protocolo de aplicação. Hipermídia Hipermídia informa o cliente sobre o que ele pode fazer em seguida, através do uso de controles de hipermídia (links e formas) nas respostas, eo URI específica para fazê-lo. O formato hipermídia concreto para uma determinada aplicação é definida no tipo de aplicativo Media. elos hipermídia são compostas por um atributo href que especifica o URI para acessar o recurso vinculado e um atributo rel que define o significado da relação, portanto, acrescentando semântica para as transições de estado na aplicação. O uso de links permite que o servidor para anunciar novos recursos, incluindo novas ligações nas respostas sem quebrar os clientes existentes. Enquanto o servidor manter ligações previamente definidas nas
  • 2.
    respostas, os clientesseriam capazes de segui-los assim como eles eram antes do novo estado foi adicionado. Os clientes que só necessitam de ser atualizadas se eles precisam acessar o novo estado. Outra vantagem hipermídia é que ele introduz descoberta, fornecendo uma maneira de fazer um protocolo de descoberta e autodocumentado. Os clientes começam a interagir com o aplicativo por meio de uma URL fixa, e a partir daí todas as outras ações acontecem pelo cliente seguindo os links , formatado com o tipo de mídia e fornecido pelo servidor em cada resposta. tipos de mídia e links definir o contrato entre o servidor de aplicativos eo cliente. O cliente interage com o sistema , navegando o estado do aplicativo utilizando as ligações . Isto é o que HATEOAS ( Hipermídia como motor do estado do aplicativo ) realmente significa. Hipermedia ( para além dos elementos já definidos ) é o que significa REST realmente . Abaixo um exemplo de um requisição Rest para retornar uma validação Aoath do salesforce: <?xml version="1.0" encoding="UTF-8"?> <mule xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/trackin g" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:spring="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd http://www.mulesoft.org/schema/mule/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking- ee.xsd"> <sub-flow name="getAuthorizationToken"> <http:request config-ref="HTTP_Request_Configuration" path="/services/oauth2/token" method="POST" doc:name="RequestAuthorization">
  • 3.
    <http:request-builder> <http:query-param paramName="grant_type" value="password"/> <http:query-param paramName="client_id" value="3MVG9Nc1qcZ7BbZ0.lrUdTc6imEmpmeMblw6fJZ_TySlFWN3 AFZ.Wbre4W01j_RkzLlqlGTqjRZLwMuMOL.qZ"/> <http:query-paramparamName="client_secret" value="7205123458111539520"/> <http:query-param paramName="username" value="teste@teste.com.br"/> <http:query-param paramName="password" value="Salesforce2!"/> </http:request-builder> <http:success-status-code-validator values="0..599"/> </http:request> <set-payload value="#[json:access_token]" doc:name="extractTokenFromResponse"/> </sub-flow> <flow name="executeWaveQuery" processingStrategy="synchronous"> <enricher target="#[flowVars.authorizationToken]" doc:name="Message Enricher"> <processor-chain doc:name="Processor Chain"> <flow-ref name="getAuthorizationToken" doc:name="getAuthorizationToken"/> </processor-chain> </enricher> <http:request config-ref="HTTP_Request_Unilever" path="/services/data/v36.0/wave/query" method="POST" doc:name="QueryWave"> <http:request-builder> <http:header headerName="Authorization" value="OAuth #[flowVars.authorizationToken]"/> <http:header headerName="Content-Type" value="application/json"/> </http:request-builder> </http:request> <logger level="INFO" doc:name="Logger"/> </flow> <flow name="getSalesChannel" processingStrategy="synchronous">
  • 4.
    <set-payload value="${query.get_sales_channel}" doc:name="setQueryGetSalesChannel"/> <flow-ref name="executeWaveQuery" doc:name="executeWaveQuery"/> <loggermessage="#[message.payloadAs(java.lang.String)]" level="INFO" doc:name="Logger"/> </flow> <flow name="getImpactedStore" processingStrategy="synchronous"> <set-payload value="${query.get_impacted_store}" doc:name="setQueryGetImpactedStore"/> <logger level="INFO" doc:name="Get Impacted Store SAQL"/> <flow-ref name="executeWaveQuery" doc:name="executeWaveQuery"/> </flow> <flow name="getECOTarget" processingStrategy="synchronous"> <set-payload value="${query.get_eco}" doc:name="setQueryGetOrderInvoiceECO"/> <logger message="SAQL -------&gt; #[message.payloadAs(java.lang.String)]" level="INFO" doc:name="Get ECO SAQL"/> <flow-ref name="executeWaveQuery" doc:name="executeWaveQuery"/> </flow> <flow name="get_orderInvoice_dataSet"> <set-payload value="${query.purge_orderInvoice}" doc:name="Set Payload"/> <logger message="SAQL -------&gt; #[message.payloadAs(java.lang.String)]" level="INFO" doc:name="Logger"/> <flow-ref name="executeWaveQuery" doc:name="executeWaveQuery"/> <flow-ref name="dms_purge_orderInvoice_Flow" doc:name="dms_purge_orderInvoice_Flow"/> </flow> </mule>