RA
Consumir rest com json
Olá pessoal, estou tentando fazer update usando rest.php com o method "store" em Data passando o ID, porém sempre inseri um registro vazio, ao invés de fazer a atualização do id informado. Json abiaxo:
POST
Retorno:
Repare que não atualizou o registro que informei no json, e criou um novo registro vazio na base de dados.
qual seria a forma correta de usar este serviço rest via Json?
POST
{
"class" : "ClientesService",
"method" : "store",
"data": [{
"id": "7",
"CLI_TIPO": "1",
"CLI_NOME": "LOJA TESTE "
}]
}
Retorno:
{
"status": "success",
"data": {
"id": 2497
}
}
Repare que não atualizou o registro que informei no json, e criou um novo registro vazio na base de dados.
qual seria a forma correta de usar este serviço rest via Json?
Você está usando a função store da classe AdiantiRecordService ou a sobrescreveu? Pelo comportamento descrito, não está reconhecendo nenhum atributo passado em "data", senão eles também deveriam ser retornados na resposta. O nome dos atributos está correto? Você está usando a função request padrão(https://pastebin.com/jmXjD1pw) para envio das informações?
Olá Nataniel Rabaioli, sim estou usando o AdiantiRecordService, a única coisa que alterei no próprio rest.php foi alterar a posição do parse do request pois não estava reconhecendo o envio com json.
Estou tentando consumir este serviço de outro aplicativo que não é PHP, por isso preciso enviar fazer o store em json puro e não esta dando certo, com method load e loadAll funcionou perfeitamente.
Obrigado pela atenção.
É difícil dizer sem ver como os dados estão sendo enviados. Mas deve ser algum detalhe na passagem dos parâmetros. Tente debugar na função store os dados recebidos.
Então Nataniel, neste teste de exemplo usei o postman, ou seja, enviando json puro com verbo POST e nao deu certo. Onde vejo um exemplo de envio para o method "store" via json ? Na documentação só encontrei exemplos via PHP dos modelos da próprio Adianti Studio.
obrigado !
https://adianti.com.br/forum/pt/view_4691?servicos-rest-no-adianti-framework-7
Nataniel, então o serviço rest do adianti só funciona com request via script php ? como eu consumo o serviço de outra linguagem ? pure json
Não precisa ser em php. A função "request" do link acima, por exemplo, usa a curl para envio dos dados. A curl pode ser usada via linha de comando, inclusive.
Entendi Nataniel. Mas não é isso que eu preciso. Se é padrão json deveria aceitar esse POST.
{
"class" : "ClientesService",
"method" : "store",
"data": [{
"id": "7",
"CLI_TIPO": "1",
"CLI_NOME": "LOJA TESTE "
}]
}
O conteúdo de "data" deve ser um objeto simples, não um array:
"data": {
"id": "7",
....
}
Nataniel, sem esse array aparece o erro abaixo:
Fatal error: Uncaught Error: Cannot use object of type stdClass as array in D:wampwwwgnotelibadiantidatabaseTRecord.php on line 320<
E com array faz o insert de um registro vazio
{
"status": "success",
"data": {
"id": 2496
}
}
Segue rest.php :
Acrescente "true" no segundo parâmetro da json_decode para forçar o cast para array associativo:
//$input = json_decode(file_get_contents("php://input"));
$input = json_decode(file_get_contents("php://input"), true);
Nataniel, funcionou amigo... era só isso, agora consigo enviar update ou insert de outros sistemas, via postaman... etc... show de bola. Muitíssimo obrigado pela paciência e grato pela contribuição., seria bom atualizar isso nos exemplos aqui do forum.
POST:
{
"class" : "ClientesService",
"method" : "store",
"data": {
"id": "7",
"CLI_NOME": "TESTE VIA POSTMAN "
}
}
RETORNO:
{
"status": "success",
"data": {
"id": "7",
"CLI_NOME": "TESTE VIA POSTMAN "
}
}