I’m taking a moment here to explain something that confused the hell out of me when I was getting into the JSON API. In short, I was confused about what POST meant in the JSON API.
POST vs GET
The official documentation mentions this:
Want to get your site’s posts? Simply send a
/wp-json/wp/v2/posts. Update user with ID 4? Send a
/wp-json/wp/v2/users/4. Get all posts with the search term “awesome”? GET
/wp-json/wp/v2/posts?search=awesome. It’s that easy.
From that I inferred that if I was updated content on my site, I would use a POST call. Otherwise, I’m always going to be using GET to get data. Makes sense. If you want to get the data on a specific post, you do a get for
/wp-json/wp/v2/posts/1234 and get that post’s data. Store the JSON output as a parameter in your plugin, let’s say, and Bob’s your father’s brother’s husband.
I was wrong.
When I started working with Alexa I was confounded. It told me it sent a
POST request to my site. I stared at that for a while. I’d been assuming that when I asked Alexa something, I’d be able to tell it to do a
GET request from
/wp-json/MYAPP/v1/MYSKILL/parameter. After all, I’m not posting data.
But then I thought about it a little bit more. A straightforward
GET request gets data from a URL without interaction. A
POST posts data to a site, and you decide what to do with it. Most of the time when we think of a
POST action happening, we think of updating data.
POST doesn’t have to mean update
POST is just sending data to your JSON API. It posts to your site.
That’s why passing the
WP_REST_Request $request data to your function gives you magical access to the request data. And from that we can grab all the data Alexa requests send to your site, which lets us parse the data and make decisions on our replies.
Now like I said before, what you do with the POST is up to you. But that explains a lot about why Amazon is so picky about making sure a request came legit from them. Especially since you can order stuff from Amazon…
“Hey Alexa, can you tell TV shows to stop killing off queer characters?”