-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCallout_Salesforce
239 lines (201 loc) · 9.86 KB
/
Callout_Salesforce
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
APEX Callout
1- habilitar webservices a acessar via callout na lista de sites aprovados pela sua org na página Configurações de sites remotos.
Em Configuração, insira Configurações de sites remotos na caixa Busca rápida e clique em Configurações de sites remotos.
Clique em Novo site remoto.
Para o nome do site remoto, insira animais_http.
Para a URL do site remoto, insira https://th-apex-http-callout.herokuapp.com. A especificação dessa URL gera uma autorização para todas as subpastas daquele ponto de extremidade, como https://th-apex-http-callout.herokuapp.com/path1 e https://th-apex-http-callout.herokuapp.com/path2.
Na descrição, escreva Serviço de animais do Trailhead: HTTP.
Clique em Salvar e novo.
Para o nome do segundo site remoto, insira animais_soap.
Para a URL do site remoto, insira https://th-apex-soap-service.herokuapp.com.
Na descrição, escreva Serviço de animais do Trailhead: SOAP.
Clique em Salvar.
2-Abra o Developer Console na engrenagem de configurações (Ícone de engrenagem de configurações).
No Developer Console, selecione Debug (Depurar) | Open Execute Anonymous Window (Abrir janela Executar no modo anônimo).
Exclua o código existente e insira o seguinte trecho
String cep = '18060020';
Http http = new Http();
HttpRequest request = new HttpRequest();
request.setEndpoint('https://viacep.com.br/ws/'+cep+'/json/');
request.setMethod('GET');
HttpResponse response = http.send(request);
if (response.getStatusCode() == 200) {
Map<String, Object> results = (Map<String, Object>) JSON.deserializeUntyped(response.getBody());
for (Object address : results.values()){
System.debug('the component address is ' + address);
}
}
Http http = new Http();
HttpRequest request = new HttpRequest();
request.setEndpoint('https://th-apex-http-callout.herokuapp.com/animals');
request.setMethod('GET');
HttpResponse response = http.send(request);
// If the request is successful, parse the JSON response.
if (response.getStatusCode() == 200) {
// Deserialize the JSON string into collections of primitive data types.
Map<String, Object> results = (Map<String, Object>) JSON.deserializeUntyped(response.getBody());
// Cast the values in the 'animals' key as a list
List<Object> animals = (List<Object>) results.get('animals');
System.debug('Received the following animals:');
for (Object animal: animals) {
System.debug(animal);
}
}
Selecione Abrir registro e clique em Executar.
Após a abertura do registro de depuração, selecione Apenas a depuração para visualizar o resultado dos demonstrativos System.debug.
Os nomes dos animais serão exibidos.
O JSON do nosso exemplo é bem simples e fácil de analisar. Para estruturas JSON mais complexas, use JSON2Apex.
Essa ferramenta gera códigos Apex altamente tipificados para a análise de uma estrutura JSON.
Basta colar o JSON no local e a ferramenta gera o código Apex do qual você precisa. Uma maravilha!
3- POST:
Http http = new Http();
HttpRequest request = new HttpRequest();
request.setEndpoint('https://th-apex-http-callout.herokuapp.com/animals');
request.setMethod('POST');
request.setHeader('Content-Type', 'application/json;charset=UTF-8');
// Set the body as a JSON object
request.setBody('{"name":"mighty moose"}');
HttpResponse response = http.send(request);
// Parse the JSON response
if (response.getStatusCode() != 201) {
System.debug('The status code returned was not expected: ' +
response.getStatusCode() + ' ' + response.getStatus());
} else {
System.debug(response.getBody());
}
AMBIENTE DE DESENVOLVIMENTO:
FILE: NEW: CLASS
public class AnimalsCallouts {
public static HttpResponse maketGetCallout() {
Http http = new Http();
HttpRequest request = new HttpRequest();
request.setEndpoint('https://th-apex-http-callout.herokuapp.com/animals');
request.setMethod('GET');
HttpResponse response = http.send(request);
// se a resposta for um sucesso, parse a resposta
if (response.getStatusCode()==200) {
//desserialização da string json em coleções de dados primitivos
Map<String,Object> results = (Map<String,Object>) JSON.deserializeUntyped(response.getBody());
// cast de valores em uma lista
List<Object> animals = (List<Object>) results.get('animals');
System.debug('Receive the following animals:');
for (Object animal:animals) {
System.debug(animal);
}
}
return response;
}
public static HttpResponse makePostCallout() {
Http http = new Http();
HttpRequest request = new HttpRequest();
request.setEndpoint('https://th-apex-http-callout.herokuapp.com/animals');
request.setMethod('POST');
request.setHeader('Content-type','application/json;charset=UTF-8');
request.setBody('{"name":"mighty moose"}');
HttpResponse response = http.send(request);
//parse do json
if (response.getStatusCode() != 201) {
System.debug('The status code returned was not expected: '+response.getStatusCode()+' '+response.getStatus());
} else {
System.debug(response.getBody());
}
return response;
}
}
CRIANDO UM StaticResourceCalloutMock
Para testar seus callouts, use callouts simulados implementando uma interface ou usando recursos estáticos. No exemplo em questão,
usamos recursos estáticos e posteriormente uma interface de simulação. O recurso estático contém o corpo de resposta que será devolvido.
E lembre-se: se usar um callout simulado, a solicitação não será enviada para o ponto de extremidade. Em vez disso, o tempo de execução do Apex sabe
como procurar a resposta especificada no recurso estático e apresentar exatamente essa informação. O método Test.setMock informa ao tempo de execução que
callouts simulados estão sendo usados no método de teste. Vejamos os callouts simulados na prática.
Em primeiro lugar, criaremos um recurso estático com uma sequência de caracteres em formato JSON que será usada para a solicitação GET.
No Developer Console, selecione File (Arquivo) | New (Novo) | Static Resource (Recurso estático).
Para o nome, insira GetAnimalResource.
Para o tipo MIME, selecione texto/simples (apesar de estarmos usando JSON).
Clique em Enviar.
Na guia que abre para o recurso, insira o conteúdo a seguir. Confira se está tudo na mesma linha, sem gerar uma quebra para a próxima. Esse é o conteúdo devolvido pelo callout simulado. Um conjunto de três criaturas da floresta.
{"animals": ["pesky porcupine", "hungry hippo", "squeaky squirrel"]}
Pressione Ctrl+S para salvar.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
CALLOUT PARA CEP
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
NOTA: O TIPO DE RESULTADO TEM UM ÚNICO ENCAPSULAMENTO:
{
"cep": "06230-150",
"logradouro": "Avenida Edmundo Amaral",
"complemento": "",
"bairro": "Piratininga",
"localidade": "Osasco",
"uf": "SP",
"ibge": "3534401",
"gia": "4923",
"ddd": "11",
"siafi": "6789"
}
Http http = new Http();
HttpRequest request = new HttpRequest();
String desejo = '06402010';
request.setEndpoint('https://viacep.com.br/ws/'+desejo+'/json/');
request.setMethod('GET');
HttpResponse response = http.send(request);
// If the request is successful, parse the JSON response.
if (response.getStatusCode() == 200) {
// Deserialize the JSON string into collections of primitive data types.
Map<String, Object> results = (Map<String, Object>) JSON.deserializeUntyped(response.getBody());
// em virtude de haver um único encapsulamento, não ha necessidade de criar outro MAP. Portanto, para pincar o valor desejado basta usar strings
String logradouronome = string.valueOf( results.get('logradouro') );
// logar no debug
system.debug(logradouronome);
@@@@@@@@@@@@@@
SITUAÇÃO PARA RESPOSTAS ENCAPSULADAS
@@@@@@@@@@@@@
NOTE O TIPO DE ENCAPSULAMENTO:
{"animal":{"id":1,"name":"chicken","eats":"chicken food","says":"cluck cluck"}}
@@@@@@@@@@@@@
Http http = new Http();
HttpRequest request = new HttpRequest();
request.setEndpoint('https://th-apex-http-callout.herokuapp.com/animals/1');
request.setMethod('GET');
HttpResponse response = http.send(request);
// If the request is successful, parse the JSON response.
if (response.getStatusCode() == 200) {
// Deserialize the JSON string into collections of primitive data types.
Map<String, Object> results = (Map<String, Object>) JSON.deserializeUntyped(response.getBody());
// Cast the values - todos metadados animal, pois não há como pincar diretamente em virtude do encapsulamento.
Map<String, Object> animal = (Map<String, Object>) results.get('animal');
// pick value somente do metadado que desejo
String animalFood = string.valueOf( animal.get('eats') );
String animalName = string.valueOf( animal.get('name') );
system.debug(animalName);
system.debug(animalFood);
}
@@@@@@@@@@@@@@@@
INTERFACE MOCK
@@@@@@@@@@@@@@@@
@isTest
global class AnimalLocatorMock implements HttpCalloutMock {
// Implement this interface method
global HTTPResponse respond(HTTPRequest request) {
// Create a fake response
HttpResponse response = new HttpResponse();
response.setHeader('Content-Type', 'application/json');
response.setBody('{"animal":{"id":1,"name":"chicken","eats":"chicken food","says":"cluck cluck"}}');
response.setStatusCode(200);
return response;
}
}
@@@@@@@@@@@@@@@@
CLASSE DE TESTE
@@@@@@@@@@@@@@@@
@isTest
private class AnimalLocatorTest {
@isTest static void getAnimalNameById() {
// Set mock callout class
Test.setMock(HttpCalloutMock.class, new AnimalLocatorMock());
// This causes a fake response to be sent
String response = AnimalLocator.getAnimalNameById(1);
// Verify that the response received contains fake values
System.assertEquals('chicken', response);
}
}
@@@@@@@@@@@@@@@@