I’ve been working on a Laravel API with validation. I’m sending this request to the server:
> POST /api/v1/clients HTTP/1.1 > Host: localhost > User-Agent: insomnia/2022.3.0 > Content-Type: application/json > Accept: application/json > Authorization: Bearer *************** > Content-Length: 16 { "name": "", }
On my development system, running windows/Apache/PHP 8.1, the POST requests return a JSON object containing validation errors.
{ "message": "The name field is required.", "errors": { "name": [ "The name field is required." ] } }
But my test system, running Linux/Apache/PHP 8.1, does not return a JSON response:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>422 Unprocessable Content</title> </head><body> <h1>Unprocessable Content</h1> <p>The server understands the media type of the request entity, but was unable to process the contained instructions.</p> </body></html>
Here is my code:
api.php
Route::group(['middleware' => 'auth:sanctum', 'prefix' => 'v1'], function () { Route::apiResource('clients', ClientApiController::class); });
StoreClientRequest.php
public function rules() { return [ 'name' => 'required|string|max:255', ]; }
ClientAPIController.php
public function store(StoreClientRequest $request) { $client = Client::create($request->all())->fresh(); return (new ClientResource($client))->response()->setStatusCode(201); }
Since it’s working on my localhost I don’t believe it is the code. I’m guessing it’s an issue with Apache or PHP configuration on the Test server but I’m not seeing anything different as far as I can tell. As one is Windows and the other Linux, it’s not straight forward to check the differences.
Any reason I’m not getting a JSON response back from the test server?
Advertisement
Answer
It does appear to be an issue with Apache dropping the body of the response when using php-fpm. I tested a couple of different configurations of Apache, Nginx, mod-php, and php-fpm.
Server | PHP | Response body |
---|---|---|
Apache | mod-php | Included |
Apache | php-fpm | Missing |
Nginx | php-fpm | Included |
I found a few links with an issue with the request body being drop so may be the same thing or something similar.
Looks like I will need to upgrade the other apps to PHP 8 so I can switch back to mod-php or move to nginx. Thanks for the help everyone.