Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I access PHP REST API PUT data on the server side?

Tags:

-- Question --

I am just starting out with the REST API and am getting pretty confused.

This is what my PHP cRUL client-side looks like for a PUT.

case 'PUT':     curl_setopt($handle, CURLOPT_CUSTOMREQUEST, 'PUT');     curl_setopt($handle, CURLOPT_POSTFIELDS, $data);     break; 

Now when I look at the server my $_SERVER['REQUEST_METHOD'] shows PUT, but my question is how do I get the $data I sent with CURLOPT_POSTFIELDS.

All I need to do is get the $data sent with a PUT request into the next line. Like

$value = $data['curl_data']; 

I have seen so much clutter on this topic that it is giving me a headache. It seems so easy on the php client side, but no one has answers that are working for the php server side.

Thanks for any help!

-- Answer (after help and homework) --

I am new so I can't answer my own question until after 8 hours... odd :)

Okay, after working with the great people here I have to say we ran into the answer. I am kicking myself for it being so easy, at the same time it was confusing.

curl_setopt($handle, CURLOPT_CUSTOMREQUEST, 'PUT'); curl_setopt($handle, CURLOPT_POSTFIELDS, http_build_query($data)); 

The first change (above) I had to add http_build_query() around $data. This took my data from an array to a url friendly string.

Next up I had to add.

parse_str(file_get_contents('php://input'), $put); 

Now I can do things like $put['data'].

The answer PaulPRO gave above does work to get the data the same way file_get_contents() did with less lines. We got stuck trying to figure out how to parse the data which was where my lack of http_build_query() I had seen on another site kicked into play.

So This is how it all works.

  1. Data is put into a normal array.
  2. http_build_query() converts it into a nice almost GET like string.
  3. file_get_contents() transports it from the client to the server.
  4. parse_str() then turns it back into an array.

I am seeing a lot of messages about using PUT to send files. I can see how this would work, but from what I read in this entire REST process was that PUT is to update data as post is to create data. Maybe I am mistaken. Am I missing something?

like image 474
Shylor Avatar asked Jul 24 '11 07:07

Shylor


People also ask

Is REST API server side?

REST APIs are stateless, meaning that each request needs to include all the information necessary for processing it. In other words, REST APIs do not require any server-side sessions. Server applications aren't allowed to store any data related to a client request.

Can we write REST API in PHP?

In this tutorial, I'll teach you how to build a simple REST API with PHP and MySQL. REST has become the de facto standard when it comes to exposing data via APIs and building web services. In fact, most web applications these days access and expose data via REST APIs.


1 Answers

From the PHP Manual:

PUT data comes from stdin:

$putdatafp = fopen("php://input", "r");

Example usage:

$putfp = fopen('php://input', 'r'); $putdata = ''; while($data = fread($putfp, 1024))     $putdata .= $data; fclose($putfp); 
like image 51
Paul Avatar answered Oct 19 '22 03:10

Paul