Create a PHP REST API : Write a RESTful API from Scratch using Plain, Object-Oriented PHP and MySQL
Ғылым және технология
Learn how to develop a complete, RESTful API using plain, object-oriented PHP, MySQL and best practices.
Full API course, including authentication:
‣ davehollingworth.net/phpapisy
Please consider supporting my channel:
☕ ko-fi.com/davehollingworth
In this video you'll learn how to:
• create RESTful URLs
• list, show, create, update and delete database records using an API
• organise your PHP code
• use controllers and table gateways
• return relevant HTTP status codes
• validate data in an API
• decode and encode requests and responses as JSON
Code shown in the video:
‣ github.com/daveh/php-rest-api
Relevant documentation:
‣ curl.se/
‣ www.postman.com/
‣ httpie.io/
‣ www.php.net/manual/en/functio...
‣ www.php.net/manual/en/pdo.set...
‣ www.php.net/manual/en/class.e...
00:00 Introduction
00:18 API client
00:31 Front controller
01:38 RESTful endpoints
02:03 URL rewriting
03:03 HTTPie usage
03:28 Routing
03:59 404 response
04:23 Collection and resource URLs
05:19 Controller class
06:27 Class autoloading
08:19 Process the request
09:06 Collection requests
09:55 JSON Content-type
10:56 Create the database
11:53 Connect to the DB
14:08 Exception handling
16:44 Table gateway class
17:42 List all records
19:52 Encode JSON values
21:35 Insert a record
21:55 Get request data
27:04 201 response
28:00 Error handling
30:00 Data validation
31:46 422 response
32:28 405 response
33:36 Resource requests
34:43 Get a resource
35:59 404 response
37:02 Update a resource
40:03 Conditional validation
41:12 Delete a resource
43:12 Summary
#PHP #MySQL #REST #API
Пікірлер: 192
Out of interest, what data are you creating an API for?
@efbYouTube
2 жыл бұрын
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.
@william254
2 жыл бұрын
Learning, I can create an API with a framework but wanted to learn doing it with plain PHP.
@williamurquhart5169
Жыл бұрын
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!
@samuelonowuko110
Жыл бұрын
A learning Management System. Want a flutter developer to build the mobile version using same data.
@rahulbansal9580
Жыл бұрын
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.
I've been searching for such amazing lesson for so long thank you so much Dave .
I love how clearly you explain things. Please keep posting videos cause its really straight forward and help me learn a lot.
This was amazing! Keep up the amazing work!
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
Very nice and modern PHP Crash course. Absolutely awesome. Thanks 🙏
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!😊
One of the best tutorials I've seen, including paid ones. I really appreciate it and would love to see more.
hands-down one of the best coding tutorials I've seen, thank you, this helps me a lot
Stunning presentation. Wow! Dave. My jaw is on the floor! Thanks
undoubtedly, one of the best PHP API instructors... full stop... subscribed
Thank you very much for such a great tutorial! You explained everything very clearly, and the tutorial was easy to follow.
Really good video, just the one I needed.
The tuitorial was perfect. Very invaluable 🏆🏆🏆
This is just what I need, Thank you very much. I love how the topic is explained, very concise and straight forward.
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
Thank you creating this wonderful video. You have helped a lot of people.
Thanks a lot. This is genuinely one of the best tutorials I've ever watched
Excellent Tutorial. Thanks Dave.
This was very helpful, thank you!
very clear explanation, thank you!
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.
YOU ARE AWESOME! I now have a better understanding of APIs in PHP
Great Tutorial, thank you very much for your time and effort!
You're really the best! Thank you so much
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
Best PHP RESTful API Tutorial ever. Close the other tabs and stick to this one.
Thank you so much! Greetings from Brazil!
Thanks a lot, it was very clear.
You are a great teacher!
This is gold... thank you so much
Thanks man, so educative and clear. I am developing my first API at the middle of this video 😁
Absolutely awesome
Thanks.. that was very useful.. and i aslo liked your teaching style, its wonderful.. thanks again.
Well-explained source for learning APIs using PHP. Thanks for your efforts ❤
Great lesson, I don't normally comment but this deserves it. Thanks 📌📌📌📌📌📌✔✔✔✔✔✔👍👍
Excellent video, thank you.
thanks very helpfull to understand the basics
excelent explication video, thanks from mexico!
thats it! i'm officially done w/ .net 😁 many txs dave!!!!!
fruitful tutorial, you are amazing
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!
@dobrinivanov395
7 күн бұрын
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
Perfection i learned alott thank you❤
Thank you so much
Thank you ! Awesome
Thanks a lot.
very cool vide, thanks!
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
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.
HI Dave, this video is the best restapi creation on KZread, please do a video to secure the restapi with tokens or using jwt etc please please 🙏
Wow Thanks
thank you
Great as ever.. May you make a tutorial about htaccess and apache server
Tq. i want to be expert at Back End as no problem at Front End. Already subscribe your modul at udemy. tq
Great one ! Thanks a lot By the way, Ibought the course on Udemy ! ... it definitively worth the money !
Great
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.
Awesome and nicely explained tutorial, thanks Dave. by any chance can you add Authentication to this tutorial ?
@dave-hollingworth
Жыл бұрын
It's on my list to do when I get chance, yes!
thank
@dave-hollingworth
Жыл бұрын
welcome
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
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 ?
@dave-hollingworth
4 ай бұрын
I suggest using something like Slim - there's a full video on it here: kzread.info/dash/bejne/gnyO1tejk7e4gM4.html
😍😍😍😍
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?
@dave-hollingworth
Жыл бұрын
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.
Que bueno.
Dave do you have course where you implement PHP MySQL + GraphQL for querying? or do you recomend one?
@dave-hollingworth
2 ай бұрын
I'm afraid not, but it's a good idea for a video, I'll make a note of it, thank you!
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?
@dave-hollingworth
Жыл бұрын
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.
In the getConnection method why do always create a new instance of a PDO?
@dave-hollingworth
Жыл бұрын
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
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...
@dave-hollingworth
Жыл бұрын
These are custom methods, yes. Basically the switch chooses which one to run based on the HTTP request method.
@sqdtnz
Жыл бұрын
@@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.
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 !
@dave-hollingworth
Жыл бұрын
HTTPie - httpie.io/
Thank you Dave for this tutorial. How can I make a route for another table. Let say user for example. Thank
@dave-hollingworth
Жыл бұрын
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.
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.
@dave-hollingworth
2 жыл бұрын
Yes, there's a link at the top of the description, thank you for your interest!
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
@dave-hollingworth
Жыл бұрын
Thank you for your kind words! Yes, the code is still current and not obsolete
@pau1phi11ips
8 ай бұрын
It's rare for old PHP to not work in the latest version. Backwards compatibility is generally very good.
Why did you choose to work in the htdocs folder directly, rather than a folder in the htdocs folder?
@dave-hollingworth
Жыл бұрын
Just to keep it as simple as possible for the video.
how do you add another route, like clients routes??
@dave-hollingworth
Жыл бұрын
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
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?
@JCSkevin
Жыл бұрын
Me too, did anyone else get and solve this?
@dave-hollingworth
Жыл бұрын
Don't know why I didn't see this message earlier - what line of code is causing the error?
@JCSkevin
Жыл бұрын
@@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 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) {}
what is the difference when using core/plain PHP and Laravel to create APIs?
@dave-hollingworth
Жыл бұрын
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
Please can you make a tutorial on the Twitter API using core PHP?
@dave-hollingworth
2 жыл бұрын
Ok will add it to my list! Thank you for the suggestion :-)
very good tutorial about rest api. is there any way to provide the rewrite rules for nginx ?
@dave-hollingworth
Жыл бұрын
You could try something like this: winginx.com/en/htaccess
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
@dave-hollingworth
6 ай бұрын
Are you running the code in a subfolder? If so you need to take this into account when parsing the URL for its segments
@johnlabuci96
6 ай бұрын
@@dave-hollingworth im using laragon and my folder structure like this dave.. www/someFolder/testApi.php
@johnlabuci96
3 ай бұрын
@@dave-hollingworthi completed my project by following your tutorial.. thanks man
Iras a terminar el proyecto?
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
Жыл бұрын
If you can't get mod_rewrite to work, you could just have the URL as localhost/products.php instead, without rewriting the URL
@rhtservicestech
Жыл бұрын
@@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
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
Жыл бұрын
In what way doesn't it work? Try comparing your code to the code in the video, there's a link in the description
@Mescudi94
Жыл бұрын
@@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 :)
This is great content. How do you secure it?
@dave-hollingworth
10 ай бұрын
Using an API key is a common way (covered on the course linked to in the description)
Unfortunately I got lost somewhere in the middle. I will finish this tutorial, but at the moment it's too complicated for me ;)
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
Жыл бұрын
It looks like there's a query string in your URL - what is the exact HTTPie command you're using?
@DavidShaw-dc4re
Жыл бұрын
@@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.
@DavidShaw-dc4re
Жыл бұрын
Regardless moving on to your online course today, great stuff.
@dave-hollingworth
Жыл бұрын
@@DavidShaw-dc4re I'm using the command-line version of HTTPie, I haven't tried the other versions yet I'm afraid
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?
@dave-hollingworth
Жыл бұрын
Of course, what do you want to do with the .htaccess file?
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 :/
@dave-hollingworth
Жыл бұрын
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
@fitrylol6716
10 ай бұрын
I have similar issue right now 403 forbidden, GET work fine, have resolved the issue? if yes ,how?
I have created a rest api using codeigniter 4, now the issue is, data return from api all data is in string data type, to to get data in their original datatype, like boolean value in true/false, ids in number, names in string.
@dave-hollingworth
2 жыл бұрын
If you connect using PDO, you can configure this by changing some PDO settings, details here: kzread.info/dash/bejne/imllrbGDe9XVlrg.html
@RahulKumar-dm5zy
2 жыл бұрын
@@dave-hollingworth very very thanks for your reply sir, i solved this issue with entity class provided by codeigniter 4 by casting, for example in userEntity i cast columns like this, proctected $cast =['id' =>'int', 'balance'=>'float','status'=>'bool'].
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?
@dave-hollingworth
Жыл бұрын
Try this link: www.udemy.com/course/php-apis/?couponCode=9B22746697922B9BEAFA
Hello Dave, 23: Do you know why I keep getting response 403 Forbidden when I type this /products name="A new product" Thank you
@dave-hollingworth
9 ай бұрын
What are you using to make the request? (e.g. HTTPie, cURL)
@ll18307
9 ай бұрын
@@dave-hollingworth I am using httpie desktop app
@ll18307
9 ай бұрын
@@dave-hollingworth hi, it appears that I can't put the inputs in the URL, except for the id. all other fields have to be put in the body in json instead of putting it in the url.
@dave-hollingworth
9 ай бұрын
Not sure why that's happening without being able to reproduce it, but if that works for you, no problem
It is possible to make an online ordering without api?, can you please make a simple online ordering system that have database and crud
@dave-hollingworth
2 жыл бұрын
Yes, you can have an online ordering system without an API - will add that to my list, thank you for the suggestion
@xanzerex1926
2 жыл бұрын
@@dave-hollingworth thank you for considering my humble request 🤩
Hello, Can that api be used with React?
@dave-hollingworth
Жыл бұрын
Absolutely, I don't see why not
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?
Dave Hollingworth can you gve me the tutoria api corse for free? i cant buy it
Add auth etc
Please can you make a tutorial secure php ?
@dave-hollingworth
2 жыл бұрын
Ok will consider it! Thanks for the suggestion!
5 minutes in and i already learned more than from 12 hr indian courses
I have a question about insert data in API, can you help me please?
@dave-hollingworth
Жыл бұрын
Of course - please give as much detail as you can in your question.
@code7882
Жыл бұрын
@@dave-hollingworth can you give contacts? maybe instagram or another social media
@dave-hollingworth
Жыл бұрын
@@code7882 My contact details are here: davehollingworth.com/contact