Avatar billede Mik2000 Professor
04. juli 2022 - 15:42 Der er 12 kommentarer og
1 løsning

API service - korrekt format

Hej

Jeg forsøger at tale med en API

Den beskriver at man skal sende i formatet (med eksempel i)
{
    "content": [
        {
            "type": 3,
            "name": "Peter"
        }
    ]
}

Jeg har prøvet at lave data sådan her
$url = "URL TIL SERVICE - den er desværre lukket med IP så kan ikke skrive den"
$token = "Token der skal sendes med"

$object = (object)array(
    "type" => 3
    "name" => "Peter"
);
$params = [
    "content" => $object
];

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_POST,1 );
curl_setopt($curl, CURLOPT_POSTFIELDS, $params );
curl_setopt($curl, CURLOPT_HTTPHEADER, [
    'token: ' . $token,
    'Accept:  application/json',
]);

$result = curl_exec($curl);

var_dump($result);

curl_close($curl);

Men det virker til jeg på en eller anden måde laver en fejl i min data, for jeg får kun et tomt response (ikke engang en fejl eller besked)

Er der en klog person der kan gennemskue hvad jeg gør forkert, selvom det jo desværre ikke er muligt at teste?
Avatar billede erikjacobsen Ekspert
04. juli 2022 - 19:34 #1
Skal det ikke bare være en JSON-streng?

$object  = '{ "content": [  {"type": 3, "name": "Peter"  }  ]  }';
Avatar billede Mik2000 Professor
04. juli 2022 - 22:24 #2
Tak for svar :)

Det har jeg også prøvet med, men så siger servicen:
"The content field is required"

Som om den ikke rigtig kan se det eller se strukturen
Avatar billede erikjacobsen Ekspert
04. juli 2022 - 23:06 #3
Du skal sørge for at din PHP giver dig fejlbeskeder - standard vil PHP i dag give dig et tomt svar ved f.eks. syntaksfejl.

Jeg kan se at du i hvert fald har glemt et komma efter 3-tallet. Det skal være:

$object = (object)array(
    "type" => 3,
    "name" => "Peter"
);
Avatar billede erikjacobsen Ekspert
05. juli 2022 - 10:57 #4
Og så er der nogen, der siger at du skal sørge for at alt du sender til API-en skal være json.  Dvs. (måske) at parameteren til CURLOPT_POSTFIELDS skal være $object som i:

$object  = '{ "content": [  {"type": 3, "name": "Peter"  }  ]  }';

Har du et eksempel på anvendelse af denne API, evt. i PHP?
Avatar billede arne_v Ekspert
05. juli 2022 - 14:49 #5
curl_setopt($curl, CURLOPT_POSTFIELDS, $params );

->

curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($params) );

?
Avatar billede Mik2000 Professor
07. juli 2022 - 11:43 #6
@erikjacobsen
Fejlen i koden var fordi jeg havde lavet en vaiabel om til tekst i eksemplet og glemt det.  Der er komma i koden og den viser fejl :)

@all
Så hvis

$params  = '{ "content": [  {"type": 3, "name": "Peter"  }  ]  }';
og
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($params) );

Giver
error":"The content field is required.

Så skal jeg have fat i dem der har API ik?
Avatar billede arne_v Ekspert
07. juli 2022 - 15:03 #7
$params  = '{ "content": [  {"type": 3, "name": "Peter"  }  ]  }';
curl_setopt($curl, CURLOPT_POSTFIELDS, $params );

eller

$object = (object)array(
    "type" => 3
    "name" => "Peter"
);
$params = [
    "content" => $object
];
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($params) );

Man skal ikke JSON encode JSON.
Avatar billede Mik2000 Professor
07. juli 2022 - 16:13 #8
Super

Begge de ting skriver også:
The content field is required.

Så tænker jeg må have fat i dem
Avatar billede arne_v Ekspert
07. juli 2022 - 16:19 #9
Ja. Det lyder som om der mangler en brik til puslespillet.
Avatar billede arne_v Ekspert
07. juli 2022 - 16:21 #10
Noget helt andet.

Hvis du skal arbejde meget med API kald, så bør du overveje at erstatte de direkte curl kald med et web service client framework (da jeg sidste checkede var requests og guzzle populære i PHP verdenen).
Avatar billede Mik2000 Professor
08. juli 2022 - 18:23 #11
Jeg prøver at skrive til dem så :)
Mange tak for tiden og svarene :)

@arne_v
Den sidste post lyder som noget jeg skal kigge lidt på

Jeg har forsøgt at søge lidt på det - har du nogle links til et sted hvor man starter?

Jeg søgte bare på Google på de ting - men der kom meget forskelligt og ved jo ikke præcis hvad det er jeg søger - om det er en struktur, en anden måde end curl eller noget andet :)
Avatar billede arne_v Ekspert
09. juli 2022 - 15:03 #12
Avatar billede Mik2000 Professor
09. juli 2022 - 23:12 #13
Tak :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester