1. Foreword:
So how is calling the 3rd party api. You can understand with some pre-coded functions, processing, optimization …, our job is to read and understand what it does and make sure. tells what inputs it needs, sometimes custom, override it to match, but usually this is very rare. Generally you can understand that I have already handled it for you, your job is to pass the input I need and you will have an output as I committed.
2. What is Guzzle:
According to the document:
1 2 3 4 5 6 7 | Guzzle is a PHP HTTP client that makes it easy to send HTTP requests and trivial to integrate with web services. Simple interface for building query strings, POST requests, streaming large uploads, streaming large downloads, using HTTP cookies, uploading JSON data, etc... Can send both synchronous and asynchronous requests using the same interface. Uses PSR-7 interfaces for requests, responses, and streams. This allows you to utilize other PSR-7 compatible libraries with Guzzle. Abstracts away the underlying HTTP transport, allowing you to write environment and transport agnostic code; i.e., no hard dependency on cURL, PHP streams, sockets, or non-blocking event loops. Middleware system allows you to augment and compose client behavior. |
Understandably it makes it easy for you to generate querry strings, streaming large downloads, use HTTP cookies etc … And it doesn’t depend on cURL, PHP stream, sockets or an unbounded loop. And it will certainly support middleware: v
3. Install Guzzle:
Since it is a package, you will have to install it in your project already. You can run the script.
1 2 | composer <span class="token keyword">require</span> guzzlehttp <span class="token operator">/</span> guzzle |
Let’s find out how it runs through the basic example:
First we can basically look at an example on the document to understand how it works:
1 2 3 4 5 6 7 | <span class="token variable">$client</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">GuzzleHttp Client</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token variable">$res</span> <span class="token operator">=</span> <span class="token variable">$client</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">request</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'GET'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'https://api.github.com/user'</span> <span class="token punctuation">,</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'auth'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'user'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'pass'</span> <span class="token punctuation">]</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token variable">$res</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">getBody</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
First, I will create a variable of type GuzzleHttp Client (), then I can point to the request I am aiming for, here the problem is just the syntax, you will need to pay attention to what the input requirements of the api you need (yaoming). Then you can use the command echo $res->getStatusCode();
to check the status your code returns. And how you check it depends on what framework you use already: v. And as I wrote above echo $res->getBody();
to retrieve your response.
For example:
At the end of the basic syntax course, let’s move to something closer to reality:
I have an image processing server, I just import the image and that server will style it according to an online trend. My job now is to import an image, when I have imported that image it will send the image I just imported so the other server will return a response for an image, my job is to just render it. Pretty easy, right.
Ok let’s go.
First I need to connect to the other server, of course:
1 2 3 4 | <span class="token variable">$client</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">GuzzleHttp Client</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token variable">$res</span> <span class="token operator">=</span> <span class="token variable">$client</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">request</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'POST'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'server của tôi'</span> <span class="token punctuation">,</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
Next I need headers. Maybe the other party will need some special data types: v.
1 2 3 4 5 | <span class="token single-quoted-string string">'headers'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'Accept'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token single-quoted-string string">'application/json'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'Authorization'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token single-quoted-string string">'auth_trusted_header'</span> <span class="token punctuation">,</span> <span class="token punctuation">]</span> <span class="token punctuation">,</span> |
Ukm box then my job is to send the image file
1 2 3 4 5 6 7 8 | <span class="token single-quoted-string string">'multipart'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token punctuation">[</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'name'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token single-quoted-string string">'file'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'contents'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token function">fopen</span> <span class="token punctuation">(</span> <span class="token variable">$request</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">file</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">path</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'r'</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'filename'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token variable">$request</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">file</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">hashName</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token punctuation">]</span> <span class="token punctuation">,</span> <span class="token punctuation">]</span> <span class="token punctuation">,</span> |
OK everything is complete and now I just need to get this response again:
1 2 | <span class="token variable">$response</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">getBody</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">getContents</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> |
OK, let’s summarize the code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <span class="token variable">$client</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">GuzzleHttp Client</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token variable">$response</span> <span class="token operator">=</span> <span class="token variable">$client</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">request</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'POST'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'server của tôi'</span> <span class="token punctuation">,</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'headers'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'Accept'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token single-quoted-string string">'application/json'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'Authorization'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token single-quoted-string string">'auth_trusted_header'</span> <span class="token punctuation">,</span> <span class="token punctuation">]</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'multipart'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token punctuation">[</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'name'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token single-quoted-string string">'file'</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'contents'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token function">fopen</span> <span class="token punctuation">(</span> <span class="token variable">$request</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">file</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">path</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'r'</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token single-quoted-string string">'filename'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token variable">$request</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">file</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">hashName</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token punctuation">]</span> <span class="token punctuation">,</span> <span class="token punctuation">]</span> <span class="token punctuation">,</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token variable">$response</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">getBody</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">getContents</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> |
ok that’s it
So how to test whether the request I called is correct: v, in addition to the passive way of checking getStatusCode()
above, you can also check by:
1 2 | <span class="token punctuation">[</span> <span class="token single-quoted-string string">'debug'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token boolean constant">true</span> <span class="token punctuation">]</span> |
Middleware
I use laravel framework so I don’t use the middleware of guzzle. But dear, who we are, the developer but who. What we like is that in addition to sabotage we look for new things to apply and build projects, to make the next bug bigger than the previous one. But we will never give up, never give up because we have a “knowledge sharing community”.
According to the document, the middleware can be understood as follows:
1 2 | Middleware augments the functionality of handlers by invoking them in the process of generating responses. Middleware is implemented as a higher order function that takes the following form ... |
you can learn more here: https://docs.guzzlephp.org/en/stable/handlers-and-middleware.html
In simple terms it allows you to control client behavior (yaoming).
Because I have not learned in depth about this part, I dare not dance the ax through the eyes of the worker. So I have to link the article I’m looking for here https://bitpress.io/laravel/php/2017/04/07/laravel-guzzle-6-middleware/
Conclude:
Reading here, you will have an idea of what Guzzle is as well as its usage and operation, right? If you see a good article, don’t forget to leave a like and comment, thank you !!!