fun pet project (10 yrs in the making! 🙃) to create a user login & personal data store for a language gaming website using vanilla js (& react) on the ft end.
my php back end skills are archaic ... so before I dive in any api php framework I want to learn how to do it in plain PHP ... this tutorial is a blessing for me ...
Come on Dave, I am still feeling dizzy watching this Video. How can you be so good! Simply no daylight between you and PHP ! Am in awe. Thank you so much, Dave. Sorry for myself trying to understand what you have taught so very well
I've been watching a lot of PHP REST API videos but none of them makes them so professional, detailed and well handled as you, thanks a lot, please make a large scale REST API project sometime or please can you reply me with a repo of some kind, thanks again!
Dude, you must be a pro! Thanks for such a detailed description. I'm actually amazed why there are so less comments and likes. You deserves a million of likes and subscribers. Subscribed!😊
Hey if you are wondering on some content, I can suggest utilising JWT access token to implement into REST API with PHP. That would be great for me, maybe other people need a tutorial on that as well as its pretty complex to grasp only from google search
I've started working with htmx recently and like that I don't have to work with json for the most part :) Still, this is a nice tutorial to set up a basic system to receive requests.
Lovely! I must ask what was that sorcery at 38:30 where you've copied l.76 and pasted but pasted values were changed to size and then to is_available😅 Am I assuming correctly that this video edition is the culprit here? 🙂
Very well explained. The only thing I got a little confused with was the switch case of POST/GET, and then also PATCH and DELETE, between processResourceRequest and processCollectionRequest. These are custom request methods? I guess I have missed something...
those php code you wrote, are still usable nowadays or are they obsolete? nice class by the way, im a javascript/node dev, and im trying to learn php, your videos are the best i have seen so far
Good tutorial, I have a question if i want to add another another model for example user so i have to create another controller and gateway for it even configure the route Can you suggest a good architecture for it ?
Thanks alot for your tutorial! I have a few questions. Before even creating the database in PHPmyAdmin, my HTTPie always returns ‘404 not found’ The only files i have are index.php, .htaccess and ProductController.php in a seperate src folder & when i try to create the database in PHPmyAdmin it will not create the table. I copied your code from github and do not understand what i’m doing wrong here or how to fix it.
The course is very useful. Thanks a lot. I have a question. If we want to create another controller, such as categories. I could not understand how we should follow the actions in Index.php. Can you show a sample code snippet to create another controller?
You'd have to create the controller class (and the gateway class if necessary) based on the URL segment, in the $parts[1] variable. A simple if-else statement would do the trick. You'd also have to modify the check for displaying a 404 status based on the URL to include another string.
2 года назад+1
Thanks for this brilliant class! One question: why am I getting an error when I define array | false in this point: public function getUsuario(string $id): array | false ? I receive this message: syntax error, unexpected '|', expecting ';' or '{' in... Is there any special environment to run this way?
That's a union type, which was introduced in PHP 8 - if you're getting an error, then you're using a version earlier than that. You can either upgrade to PHP 8, or remove those return type declarations.
What I hate about php tutorials, is that there is no any backend or frontend distinction and every other file is in .php extension. What about js html extensions or RESTful API?
Hi, Dave, could you consider helping with the expanded .htaccess rules? Secondly, could you extend this Video to add the making of a Mobile App using PHP for Server Side scripts?
hello, I don't get it... How did you manage to send body POST request trough URL without any function created ? It don't work when I type "localhost/product "a new product" ! 🤨
@@dave-hollingworth Sorry Dave, I'm new to API. And in fact, in the video, I thought at first that when you were typing into the console your POST request , that you were typing it through a navigator URL like a $_GET, but now I 've understood :)
Laravel does a lot for you, with plain PHP you have to do it all yourself. Plain PHP is simpler though and uses less resources, but Laravel is probably faster to develop once you know the framework, so it's up to you which one you use
Can someone help: I got this error when I want to post data form React fornt to PHP back: response to preflight request doesn't pass access control check it does not have http ok status
I am attempting to replicate what you have done here. However the mod_rewrite is not working with the .htaccess file. I have confirmed that it is turned on in Apache using a2enmod on Linux. Any suggestions on how I can fix this ?
@@dave-hollingworth I am using Apache. I did figure it out. The AllowOverride directive was set to None. When configured in this manner, htaccess is useless as Apache ignores it. Had to change it to All and then the htaccess file was recognized
Hi and thank you so much for this! I have one question though. I keep getting this error when trying to connect to the DB: "syntax error, unexpected 'private' (T_PRIVATE), expecting variable (T_VARIABLE)". Can't seem to find the issue. Do you have any idea what can it be?
@@dave-hollingworth Found the problem: If you declare a __construct function with private parameters, you get the error, so the example would be in the declaration of the Database class. The reason is that this feature of allowing private parameters was only introduced in PHP v8. So anything less than this will generate the error. Now that I know this, I used the following to get the same result. PHP < v8 private string $host; private string $name; private string $user; private string $password; public function __construct( string $akahost, string $akaname, string $akauser, string $akapassword) { $this->host=$akahost; $this->name=$akaname; $this->user=$akauser; $this->password=$akapassword; } PHP > v8 public function __construct(private string $host, private string $name, private string $user, private string $password) {}
To connect to the database - if you're calling the getConnection method more than once in a single request, then you could modify it to always return the same object
The check for the URL segment is to demonstrate returning a 404 response - to add other routes, you would change this check to include others; or if you have a lot of resources, consider using a router component or something like Slim
Is there a diff between using httpie desktop and terminal? Im using desktop version and if i try to make a POST i all time get 403 response "Forbidden You don't have permission to access this resource." GET Works fine but POST wont work at all.. after 2 hours trying to fix i have no clue why it won't work :/
There shouldn't be a difference as far as the code on the server is concerned, no - where is the 403 error coming from, your code or is the server generating it? It could be a permissions problem if you have the script in another folder
At @22:20 I am using HTTPie web app to do the testing and when I ran POST webserver/products name="xxx" it get a 404 status response. ... $parts = explode("/", $_SERVER['REQUEST_URI']); if ($parts[1] != "products") { http_response_code(404); exit(); { ... I examined the contents of $parts[1] and it is "products%20name=%22xxx%22" What am I doing wrong? My code worked up until this point like in the video.
@@dave-hollingworth POST localhost/products name="xxx" I put in a a json echo of $parts[1], ignore all but "file" as they are hard coded. { "code": 404, "message": "Not Found", "file": "ncrs%20name=%22xxx%22", "line": "" } Ya I thought the same, about the querystring. You are using the desktop version of HTTPie? I was using the web version, is there a setting somewhere to tell it to treat /products name="xxx" as a form body rather than a querysytring? I asked because I searched the UI and didn't find anything.
dave, on minute 22:22 i try the post request products name="new product" but the page return forbidden.. i change it to products name='new product' and now it return 404 not found.. is there any place that i need to check or any setting that i need to change? thanks
Out of interest, what data are you creating an API for?
fun pet project (10 yrs in the making! 🙃) to create a user login & personal data store for a language gaming website using vanilla js (& react) on the ft end.
Learning, I can create an API with a framework but wanted to learn doing it with plain PHP.
Personal project about tree varieties of all things.. whilst on break from MSc. This is great precursor to your Udemy course so thanks for posting!
A learning Management System. Want a flutter developer to build the mobile version using same data.
For learning. Thank you, Dave, for an amazing video.
my php back end skills are archaic ... so before I dive in any api php framework I want to learn how to do it in plain PHP ... this tutorial is a blessing for me ...
Quite simply: the best php tutorial I have seen so far! Thank you for your crystal clear explanations.
One of the best tutorials I've seen, including paid ones. I really appreciate it and would love to see more.
I love how clearly you explain things. Please keep posting videos cause its really straight forward and help me learn a lot.
hands-down one of the best coding tutorials I've seen, thank you, this helps me a lot
Come on Dave, I am still feeling dizzy watching this Video. How can you be so good! Simply no daylight between you and PHP ! Am in awe.
Thank you so much, Dave. Sorry for myself trying to understand what you have taught so very well
I've been watching a lot of PHP REST API videos but none of them makes them so professional, detailed and well handled as you, thanks a lot, please make a large scale REST API project sometime or please can you reply me with a repo of some kind, thanks again!
I'm not familiar with a repo but thank you for the video idea, I'll add it to my list!
Dude, you must be a pro! Thanks for such a detailed description. I'm actually amazed why there are so less comments and likes. You deserves a million of likes and subscribers. Subscribed!😊
I came from Node and Python. Your tutorial pace very well and the content was concise, gave me the confidence to build one API server with PHP todday.
Best PHP RESTful API Tutorial ever. Close the other tabs and stick to this one.
undoubtedly, one of the best PHP API instructors... full stop... subscribed
Very nice and modern PHP Crash course. Absolutely awesome. Thanks 🙏
The tuitorial was perfect. Very invaluable 🏆🏆🏆
Thanks a lot. This is genuinely one of the best tutorials I've ever watched
Stunning presentation. Wow! Dave. My jaw is on the floor!
Thanks
thats it! i'm officially done w/ .net 😁 many txs dave!!!!!
This is great! Perfect amount of explanation. I still have to dig in as I dont have PHP experience and this was exactly what I needed. great job!
Hey if you are wondering on some content, I can suggest utilising JWT access token to implement into REST API with PHP. That would be great for me, maybe other people need a tutorial on that as well as its pretty complex to grasp only from google search
This is just what I need, Thank you very much.
I love how the topic is explained, very concise and straight forward.
you're very good dave, you teach and introduce us to the new term like table gateway pattern and many more along the tutorial.. kudos
I've started working with htmx recently and like that I don't have to work with json for the most part :)
Still, this is a nice tutorial to set up a basic system to receive requests.
thanks a lot! this is exactly what I was looking for, you explained everything really well, now I can go ahead and make my project
5 minutes in and i already learned more than from 12 hr indian courses
Thank you creating this wonderful video. You have helped a lot of people.
YOU ARE AWESOME! I now have a better understanding of APIs in PHP
Great lesson, I don't normally comment but this deserves it. Thanks 📌📌📌📌📌📌✔✔✔✔✔✔👍👍
Thanks man, so educative and clear. I am developing my first API at the middle of this video 😁
Thank you very much for such a great tutorial!
You explained everything very clearly, and the tutorial was easy to follow.
This was amazing! Keep up the amazing work!
Thank you Dave Hollingoat
Really good video, just the one I needed.
Well-explained source for learning APIs using PHP.
Thanks for your efforts ❤
Thank you so much! Greetings from Brazil!
HI Dave, this video is the best restapi creation on RUclips, please do a video to secure the restapi with tokens or using jwt etc please please 🙏
Great Tutorial, thank you very much for your time and effort!
Thanks Dave, It's very Helpful tutorial.
This was very helpful, thank you!
You are a great teacher!
fruitful tutorial, you are amazing
very clear explanation, thank you!
You're really the best! Thank you so much
Thanks.. that was very useful.. and i aslo liked your teaching style, its wonderful.. thanks again.
Thank you very much for the Great Explained Video. If you can, please make another one by explaining how to upload an image / Document using the API
Thanks for sharing, excelent content.
Excellent Tutorial. Thanks Dave.
excelent explication video, thanks from mexico!
Great as ever.. May you make a tutorial about htaccess and apache server
thanks very helpfull to understand the basics
Awesome and nicely explained tutorial, thanks Dave. by any chance can you add Authentication to this tutorial ?
It's on my list to do when I get chance, yes!
Thanks a lot, it was very clear.
Tq. i want to be expert at Back End as no problem at Front End. Already subscribe your modul at udemy. tq
Lovely!
I must ask what was that sorcery at 38:30 where you've copied l.76 and pasted but pasted values were changed to size and then to is_available😅 Am I assuming correctly that this video edition is the culprit here? 🙂
Yes, sorry that was done in the edit!
Nice tutor 😊
Sorry again, Could I ask you which request software you are using in this video please ? Thank you very much, this tutorial is so well realized !
HTTPie - httpie.io/
Great one ! Thanks a lot
By the way, Ibought the course on Udemy !
... it definitively worth the money !
thanks for the nice video.
Please can you make a tutorial on the Twitter API using core PHP?
Ok will add it to my list! Thank you for the suggestion :-)
This is gold... thank you so much
W great video!
Excellent video, thank you.
Very well explained. The only thing I got a little confused with was the switch case of POST/GET, and then also PATCH and DELETE, between processResourceRequest and processCollectionRequest. These are custom request methods? I guess I have missed something...
These are custom methods, yes. Basically the switch chooses which one to run based on the HTTP request method.
@@dave-hollingworth I have figured it out, watched it all over. This was a great tutorial, I have learned a lot in just one day. Thank you.
Thank you so much
Perfection i learned alott thank you❤
Thanks a lot.
those php code you wrote, are still usable nowadays or are they obsolete? nice class by the way, im a javascript/node dev, and im trying to learn php, your videos are the best i have seen so far
Thank you for your kind words! Yes, the code is still current and not obsolete
It's rare for old PHP to not work in the latest version. Backwards compatibility is generally very good.
Dave do you have course where you implement PHP MySQL + GraphQL for querying? or do you recomend one?
I'm afraid not, but it's a good idea for a video, I'll make a note of it, thank you!
Absolutely awesome
Thankyou sir
Iras a terminar el proyecto?
very good tutorial about rest api. is there any way to provide the rewrite rules for nginx ?
You could try something like this: winginx.com/en/htaccess
Good tutorial,
I have a question if i want to add another another model for example user so i have to create another controller and gateway for it even configure the route
Can you suggest a good architecture for it ?
I suggest using something like Slim - there's a full video on it here: ruclips.net/video/PHZtujcTRPk/видео.html
Wow Thanks
very cool vide, thanks!
Thank you Dave for this tutorial. How can I make a route for another table. Let say user for example. Thank
You can just create more scripts that are similar to the ones in the tutorial but for a different table, e.g. create_user.php etc.
Thank you ! Awesome
Hi Dave.
Do you have any course about basics of this toturial? I can't undestand this toturial.
I have also learned your two MVC courses on Udemy.
Yes, there's a link at the top of the description, thank you for your interest!
Thanks alot for your tutorial! I have a few questions. Before even creating the database in PHPmyAdmin, my HTTPie always returns ‘404 not found’ The only files i have are index.php, .htaccess and ProductController.php in a seperate src folder & when i try to create the database in PHPmyAdmin it will not create the table. I copied your code from github and do not understand what i’m doing wrong here or how to fix it.
The course is very useful. Thanks a lot. I have a question. If we want to create another controller, such as categories. I could not understand how we should follow the actions in Index.php. Can you show a sample code snippet to create another controller?
You'd have to create the controller class (and the gateway class if necessary) based on the URL segment, in the $parts[1] variable. A simple if-else statement would do the trick. You'd also have to modify the check for displaying a 404 status based on the URL to include another string.
Thanks for this brilliant class! One question: why am I getting an error when I define
array | false
in this point: public function getUsuario(string $id): array | false
?
I receive this message: syntax error, unexpected '|', expecting ';' or '{' in...
Is there any special environment to run this way?
That's a union type, which was introduced in PHP 8 - if you're getting an error, then you're using a version earlier than that. You can either upgrade to PHP 8, or remove those return type declarations.
Great
What I hate about php tutorials, is that there is no any backend or frontend distinction and every other file is in .php extension. What about js html extensions or RESTful API?
This is great content. How do you secure it?
Using an API key is a common way (covered on the course linked to in the description)
Hi, Dave, could you consider helping with the expanded .htaccess rules?
Secondly, could you extend this Video to add the making of a Mobile App using PHP for Server Side scripts?
Of course, what do you want to do with the .htaccess file?
thank you
hello, I don't get it... How did you manage to send body POST request trough URL without any function created ? It don't work when I type "localhost/product "a new product" ! 🤨
In what way doesn't it work? Try comparing your code to the code in the video, there's a link in the description
@@dave-hollingworth Sorry Dave, I'm new to API. And in fact, in the video, I thought at first that when you were typing into the console your POST request , that you were typing it through a navigator URL like a $_GET, but now I 've understood :)
Unfortunately I got lost somewhere in the middle. I will finish this tutorial, but at the moment it's too complicated for me ;)
what is the difference when using core/plain PHP and Laravel to create APIs?
Laravel does a lot for you, with plain PHP you have to do it all yourself. Plain PHP is simpler though and uses less resources, but Laravel is probably faster to develop once you know the framework, so it's up to you which one you use
Can someone help:
I got this error when I want to post data form React fornt to PHP back:
response to preflight request doesn't pass access control check it does not have http ok status
I am attempting to replicate what you have done here. However the mod_rewrite is not working with the .htaccess file. I have confirmed that it is turned on in Apache using a2enmod on Linux. Any suggestions on how I can fix this ?
If you can't get mod_rewrite to work, you could just have the URL as localhost/products.php instead, without rewriting the URL
@@dave-hollingworth I am using Apache. I did figure it out. The AllowOverride directive was set to None. When configured in this manner, htaccess is useless as Apache ignores it. Had to change it to All and then the htaccess file was recognized
Why did you choose to work in the htdocs folder directly, rather than a folder in the htdocs folder?
Just to keep it as simple as possible for the video.
Hi and thank you so much for this!
I have one question though. I keep getting this error when trying to connect to the DB:
"syntax error, unexpected 'private' (T_PRIVATE), expecting variable (T_VARIABLE)". Can't seem to find the issue.
Do you have any idea what can it be?
Me too, did anyone else get and solve this?
Don't know why I didn't see this message earlier - what line of code is causing the error?
@@dave-hollingworth Found the problem: If you declare a __construct function with private parameters, you get the error, so the example would be in the declaration of the Database class. The reason is that this feature of allowing private parameters was only introduced in PHP v8. So anything less than this will generate the error. Now that I know this, I used the following to get the same result.
PHP < v8
private string $host;
private string $name;
private string $user;
private string $password;
public function __construct( string $akahost,
string $akaname,
string $akauser,
string $akapassword)
{
$this->host=$akahost;
$this->name=$akaname;
$this->user=$akauser;
$this->password=$akapassword;
}
PHP > v8
public function __construct(private string $host,
private string $name,
private string $user,
private string $password)
{}
In the getConnection method why do always create a new instance of a PDO?
To connect to the database - if you're calling the getConnection method more than once in a single request, then you could modify it to always return the same object
😍😍😍😍
Please can you make a tutorial secure php ?
Ok will consider it! Thanks for the suggestion!
how do you add another route, like clients routes??
The check for the URL segment is to demonstrate returning a 404 response - to add other routes, you would change this check to include others; or if you have a lot of resources, consider using a router component or something like Slim
Is there a diff between using httpie desktop and terminal? Im using desktop version and if i try to make a POST i all time get 403 response "Forbidden
You don't have permission to access this resource." GET Works fine but POST wont work at all.. after 2 hours trying to fix i have no clue why it won't work :/
There shouldn't be a difference as far as the code on the server is concerned, no - where is the 403 error coming from, your code or is the server generating it? It could be a permissions problem if you have the script in another folder
I have similar issue right now 403 forbidden, GET work fine, have resolved the issue? if yes ,how?
It is possible to make an online ordering without api?, can you please make a simple online ordering system that have database and crud
Yes, you can have an online ordering system without an API - will add that to my list, thank you for the suggestion
@@dave-hollingworth thank you for considering my humble request 🤩
At @22:20 I am using HTTPie web app to do the testing and when I ran POST webserver/products name="xxx" it get a 404 status response.
...
$parts = explode("/", $_SERVER['REQUEST_URI']);
if ($parts[1] != "products") {
http_response_code(404);
exit();
{
...
I examined the contents of $parts[1] and it is "products%20name=%22xxx%22" What am I doing wrong? My code worked up until this point like in the video.
It looks like there's a query string in your URL - what is the exact HTTPie command you're using?
@@dave-hollingworth POST localhost/products name="xxx"
I put in a a json echo of $parts[1], ignore all but "file" as they are hard coded.
{
"code": 404,
"message": "Not Found",
"file": "ncrs%20name=%22xxx%22",
"line": ""
}
Ya I thought the same, about the querystring. You are using the desktop version of HTTPie? I was using the web version, is there a setting somewhere to tell it to treat /products name="xxx" as a form body rather than a querysytring? I asked because I searched the UI and didn't find anything.
Regardless moving on to your online course today, great stuff.
@@DavidShaw-dc4re I'm using the command-line version of HTTPie, I haven't tried the other versions yet I'm afraid
dave, on minute 22:22 i try the post request products name="new product" but the page return forbidden.. i change it to products name='new product' and now it return 404 not found.. is there any place that i need to check or any setting that i need to change? thanks
Are you running the code in a subfolder? If so you need to take this into account when parsing the URL for its segments
@@dave-hollingworth im using laragon and my folder structure like this dave.. www/someFolder/testApi.php
@@dave-hollingworthi completed my project by following your tutorial.. thanks man
Hi, i want to buy this course in udemy, appears 13.99 U$S but when i go to buycharge 84 U$S, can you help me?
Try this link: www.udemy.com/course/php-apis/?couponCode=9B22746697922B9BEAFA