Folder Structure for API's - Beginner, Intermediate, and Advanced

Поділитися
Вставка
  • Опубліковано 30 чер 2024
  • Best Tech Resume Template: papermoontech.com/pmcsrtk/pedro
    Use code: PEDRO for 20% off ^
    In this video we will go over some examples of folder structures you might want to use when building an API using NodeJS and Express. This can also be applied when building API's using any other type of language / framework. There is no correct folder structure, this are just my opinions.
    Comment down below your favourite rite structure!
    -
    🚀 Learn ReactJS By Building 6 Projects: codedamn.com/learn/reactjs-pr...
    Please leave a comment on what topic you guys want me to cover next!
    -
    📞 Tutoring Session: www.fiverr.com/share/pw8RPY
    💻 PedroTech Discord: / discord
    -
    Social
    ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
    Website: machadopedro.com
    Twitter: / pedrotech_
    Linkedin: / machadop1407
    Instagram: / _pedro.machado_
    Github: github.com/machadop1407
    Email: machadop1407@gmail.com
    Timestamps
    00:00 | Introduction
    01:04 | Beginners
    08:12 | Intermediate
    12:37 | Advanced
    Tags:
    - Express API
    - Folder Structure
    - ReactJS Tutorial
    - ReactJS and MySQL
    - NodeJS Tutorial
    - API Tutorial
  • Наука та технологія

КОМЕНТАРІ • 162

  • @gerooq
    @gerooq 3 роки тому +181

    "if you're a beginner, dont worry about folder structure too much, you're gonna write garbage code anyways" LMAOOOOO

    • @PedroTechnologies
      @PedroTechnologies  3 роки тому +45

      Hahaha I still remember my first nodejs / express project. I wrote a whole API for a social media platform in a single file :)

    • @gerooq
      @gerooq 3 роки тому

      @@PedroTechnologies damn hahaha, great video though, i think i'll do a mix of all 3 types that you showed for my project

    • @CodingByAmp
      @CodingByAmp 3 роки тому +1

      sam

    • @LordVodka313
      @LordVodka313 2 роки тому +5

      This right here is an absolute truth. My first expressJs app was a single line with an accumulation of all that I learnt as I went. Now I can't even look at it without my eyes bleeding.
      One thing that is underrated/not emphasized enough is that the first version of any app is the TRUE process of requirement gathering/skill proficiency: that's where you really close the gap between the things _you know that know_ and the things _you don't know that you don't know_

    • @henriqueb5637
      @henriqueb5637 Рік тому +2

      Not necessarily.
      There are beginners who write cleaner code than most experienced developers.
      It depends on the teacher and/or learning material source

  • @yankarlotexeira
    @yankarlotexeira 2 роки тому +142

    For advance mode: I suggest adding a repositories folder, where it handles the database operations, and letting the services just handling the business logic. It makes it easier to migrate to another database.

    • @florianfanderl6674
      @florianfanderl6674 2 роки тому +13

      How often did you migrate to another database? I hear this argument so often, but I havent changed the database once, nor has anybody I know.

    • @yankarlotexeira
      @yankarlotexeira 2 роки тому +8

      ​@@florianfanderl6674 , I got your point, but I saw this twice, and the last one has been very smooth due to this practice. Moreover, It doesn´t hurt to implement it just in case. Anyway, keep the risk matrix chart in mind based on the requirements.

    • @florianfanderl6674
      @florianfanderl6674 2 роки тому +5

      @@yankarlotexeira well at least you had that case. First time I hear somebody actually did that. I tend to get VERY cautious, if people put things into code they don't need more, but might need later. Also later never arrives. Add 15 of such things and you for a mess. E.g. there's also the habit of putting 100 random things into application config that actually don't change, just because they seem to belong into the application config. Even worse when they're actually not really supported to change. There are so many ways to make software generic and it really helps when this piece of software actually needs to be generic for a real need. But I heavily advise against it, just for the "what if". But yeah, data access in general isn't too hard to abstract. So it doesn't introduce a lot of complexity.

    • @pawnstar8771
      @pawnstar8771 2 роки тому

      hey, In my code I am using mySQL queries inside APIs. So according to you I should have repository folder containing a file with query?

    • @yankarlotexeira
      @yankarlotexeira 2 роки тому +2

      @@pawnstar8771 yes. It makes easier to isolate problems, easier to do unit tests, and in my opinion it would make the code cleaner and more maintainable.

  • @chanelyma
    @chanelyma 2 роки тому

    Hi Pedro, thanks for sharing it.
    I was going really crazy about folder structure and in the end you make very clear that there's more about it than meets the eye.

  • @nagwarg
    @nagwarg 2 роки тому +3

    Obrigado Pedro!
    Your videos have been helping me a lot in getting back into web dev after a few months break. You're the man!
    Can you point out any public repos for advanced projects that use a similar stack and structure? I think that would really help connect all the dots if we could see something simmilar implemented in a mature project.
    Cheers! Keep it up on being awsome!

  • @jacobtb1
    @jacobtb1 3 місяці тому +2

    It's amazing how difficult finding information on this topic has been. Thanks.

  • @rodcurvelo4075
    @rodcurvelo4075 3 роки тому +7

    Muito bacana Pedro! Vc foi direto ao ponto. Espero que você faça um video de um projeto com essa estrutura avançada de pastas, junto com REACT, usando talvez o PERN stack e usando o TDD. Já me inscrevi. Quero passar pra senior e ter modelos como inspiração para futuros projetos.

  • @idevbrandon
    @idevbrandon 2 роки тому +3

    Thank you Pedro this is what i needed for my project :)

  • @victoriaabonin
    @victoriaabonin 2 роки тому +2

    really nice video, knowing a common production folder structure helps understand node itself

  • @BarakAlmog
    @BarakAlmog 2 роки тому

    Beautiful! Exactly what I was looking for. Thanks so much.

  • @RrR2010
    @RrR2010 Рік тому +2

    Ganhou mais um inscrito. Estou em busca de vídeos mais avançados assim já faz algum tempo. A maioria dos vídeos são bem "Getting Started" e não mostram as melhores práticas que podem facilitar na escalabilidade dos projetos. Obrigado!!!

  • @jojojawjaw
    @jojojawjaw 3 роки тому +12

    What a great tutorial! concise, yet really informative!

  • @Omer-jb2io
    @Omer-jb2io 2 роки тому

    Finally, I couldn't find anyone that actually explained it.

  • @MarioLariosOfficial
    @MarioLariosOfficial Рік тому

    Thanks for this video it helped so much man, especially right now in my bootcamp.

  • @ThColinPereira
    @ThColinPereira 3 роки тому

    this is so well explained, thanks pedro

  • @mitejmadan8672
    @mitejmadan8672 2 роки тому

    Thanks for creating this video. Really helped a lot

  • @failist9570
    @failist9570 3 роки тому +4

    Thanks Pedro for this. Please make more content on production grade setup and practices.

    • @PedroTechnologies
      @PedroTechnologies  3 роки тому +1

      I really enjoyed the support on this video so I plan on making more like this!

  • @theDanielJLewis
    @theDanielJLewis 2 роки тому

    Thank you for this great overview!

  • @rayvincentdelacruz8251
    @rayvincentdelacruz8251 3 роки тому +3

    Great bro! This is an excellent content we need. Keep it up!

  • @saurabhjdas786
    @saurabhjdas786 2 роки тому

    I like how the beginner folder structure had PascalCase for the folder names, kinda like class names lol. Great video, very informative!

  • @vishwajitbhagat9515
    @vishwajitbhagat9515 2 роки тому

    That's all that I needed. Thanks, buddy

  • @Landon_Hughes
    @Landon_Hughes 3 роки тому +2

    Great tutorial man! I'm just getting into React so this was helpful :)

  • @nazrulchowdhury1047
    @nazrulchowdhury1047 2 роки тому +6

    A separate data layer could also be added in the advanced section. This layer will interact with db and could be imported in the service layer to be used as a database adaptor. Then in case of a db swap, just the adaptor has to be re-implemented without even touching the rest of the application.

  • @vieiratn
    @vieiratn 3 роки тому +7

    Amazing content, dude! I'm trying to improve my code and you're helping me a lot. Really appreciated! :)

    • @PedroTechnologies
      @PedroTechnologies  3 роки тому +1

      Thats awesome! I am glad you are learning!

    • @vieiratn
      @vieiratn 3 роки тому

      @@PedroTechnologies TMJ!

  • @nazdumanskyy
    @nazdumanskyy 10 місяців тому

    This was very helpful thank you!

  • @fares.abuali
    @fares.abuali 2 роки тому +1

    Thanks Pedro!
    Precious info

  • @greykor140
    @greykor140 3 роки тому +1

    Didn't know there was a video on this LOL. Ended up watching one of your tutorial series video to see how things were structured!

  • @guilhermejoviniano4352
    @guilhermejoviniano4352 Рік тому

    thanks for the video dude!, really good content!

  • @Pawii
    @Pawii 3 роки тому +1

    Thank you for sharing your knowledge! really great stuff!!!

  • @MiladAKareem
    @MiladAKareem Рік тому

    This video was very beneficial for me thanks a lot for such a good video, this kind of video is a need for the UA-cam community. wish you the best.

  • @wassefbenahmed1801
    @wassefbenahmed1801 2 роки тому

    thank you, this was very helpful!

  • @rammehar5531
    @rammehar5531 2 роки тому

    Very Clean Explanation wonderful

  • @rokeebashobiye1242
    @rokeebashobiye1242 2 роки тому

    This is a great one dude.. Can you make a tutorial using the advanced folder structure for a project?

  • @aayushtaneja70
    @aayushtaneja70 3 роки тому +8

    We can keep the Models and Helpers out of the api/v1 folder because the database models do not depend on the version of API. Also, the utils/helpers also don't change I guess.

  • @shubhamjha1473
    @shubhamjha1473 2 роки тому +1

    Short and precise. Best combo 👍

  • @MrMonishSoni
    @MrMonishSoni Рік тому +4

    In advanced level : I like separation of api versioning api/v1, api/v2 but its debatable for versioning vs subdomain. Rather than that i prefer app folder containing MVC + index.ts (entry point) Initially and if the project scales then separation based on component/functionality i.e lets say we've 3 comp. user, product, order. so each comp. have their own MVC, rest is same. What do you think ?

  • @karlasosa5304
    @karlasosa5304 3 роки тому +1

    Great video Pedro thank you!

  • @hijuliansosa
    @hijuliansosa 3 роки тому

    It's great, thanks!

  • @herickvinicius
    @herickvinicius 3 роки тому +8

    QUE MASSA! Eu tinha essa curiosidade desde que comecei a desenvolver APIs e finalmente achei um conteúdo massa sobre isso! Parabéns mano!
    (Mais legal ainda é ter assistido o video inteiro achando que era de algum americano e no final descobrir que é um brazuca hahahah)

    • @PedroTechnologies
      @PedroTechnologies  3 роки тому +2

      Kkkkkkkk muita gente nao percebe até ler meu nome. Fico feliz que gostou do video :)

  • @mrinaldhawan3959
    @mrinaldhawan3959 2 роки тому

    Thank you pedro for such an amazing video. I had looking for something like this all around.
    I am now planning to use your intermediate folder structure, as I am fairly new to Nodejs.
    I have one doubt though, where should I place 3rd Party API Calls?
    3rd Party API calls I am integrating will include CRUD operations of their own. Infact, I need to perform CRUD in my database based on success/failure of 3rd party API CRUD operations. Any suggestions will be of great help.

  • @pankajkhushalani
    @pankajkhushalani 2 роки тому +1

    Amazing content! Thank you for this video

  • @salehmohammednasseralobidi5880
    @salehmohammednasseralobidi5880 3 роки тому

    Excellent job amazing
    Can make simple project for this structure to be amazing

  • @ahmedelgaidi
    @ahmedelgaidi Рік тому

    Really good video
    Thanks a lot

  • @mansilaad2062
    @mansilaad2062 3 роки тому +2

    Really appreciating content 👍👍
    Plz make video on mvc model which u talked about.

  • @kunjchoksi
    @kunjchoksi 3 роки тому +1

    Great informative video. I was a bit confused to start & you have made it clear to me. Thanks

  • @suhaimitech9973
    @suhaimitech9973 3 роки тому +1

    Hi, do you have any project that uses medium or advanced structure? I would like to see what code goes in the folder

  • @PanlasangMotour
    @PanlasangMotour 3 роки тому +1

    Noice !! :) great job

  • @pranjalwalia3810
    @pranjalwalia3810 3 роки тому +2

    Great stuff..Kudos on the intro... testing express n mongo APIs TS with jest... something to cover in the next video?

    • @PedroTechnologies
      @PedroTechnologies  3 роки тому +1

      Thank you! I am planning on doing a video on API testing!

    • @dawid_dahl
      @dawid_dahl 3 роки тому

      Seconded! Jest/supertest. Also a video on mocking best practices would be awesome.

  • @jorgelopezcuns
    @jorgelopezcuns Рік тому

    Muy buen video Pedro

  • @sreekumarmenon
    @sreekumarmenon 2 роки тому +3

    Informative ! Folder structure + some code would have been more useeful ~

  • @robsonreis3450
    @robsonreis3450 3 роки тому +1

    Amazing tips!!!!

  • @ratul1125
    @ratul1125 2 роки тому +1

    I also like having a "utils" folder where I add all the utility functions

  • @edu.paixao
    @edu.paixao Рік тому

    Vlw, Pedro

  • @metalshocker93
    @metalshocker93 2 роки тому

    What do we have to put in the index.ts file that you create in the service folder of advance level? Do we need to add something in particular in order to access the classes the way you explained it, by only calling the service folder when we do the import?

  • @amanbadhan7546
    @amanbadhan7546 Місяць тому

    Hi , hee is the best explanation of folder structure. I have a question. Can you tell me how to manage the folder structure in the case of when are writting code for admin , user and vendor in the same project. Please explain this as well ... Thank you

  • @j9meslloyd810
    @j9meslloyd810 Рік тому

    Great videos. Pls Pedro, can i know the differences between services ans helpers in your project structure

  • @alexanderzharkov6953
    @alexanderzharkov6953 2 роки тому

    I will definitely subscribe to this channel

  • @luiza4142
    @luiza4142 3 роки тому +6

    Adorei o canal, agora preciso aprender inglês "de vdd" hahaha

  • @matthewmarsala1788
    @matthewmarsala1788 2 роки тому +1

    For the index.ts files. I guess the concept is a bit confusing. Shouldn't it say export since you're exporting the files in those folders so they can accessed elsewhere?

  • @haddadabdallah
    @haddadabdallah 2 роки тому

    Good job

  • @felipeserrano9173
    @felipeserrano9173 3 роки тому

    Nice!

  • @faiqkhan7545
    @faiqkhan7545 2 роки тому

    I wanna know is that, advance structure is control by only one person ? Or multiple members work on it to maintain it ?

  • @L4zEGaming
    @L4zEGaming 3 роки тому +1

    Are you using yarn 2? Could you make a video on package managers, great video btw

    • @PedroTechnologies
      @PedroTechnologies  3 роки тому

      Thank you! Yes I use yarn 2! I can make one but I think both npm and yarn are equally good

  • @mahardhikaputra
    @mahardhikaputra 11 місяців тому

    src (model controller middleware helper environment router)
    Always use that schema folder in api what I made

  • @snake1625b
    @snake1625b 2 роки тому

    Do you suggest mocking a local database for testing database querying

  • @Jefferson4026
    @Jefferson4026 2 роки тому

    would you make a simple real example using this advanced structure? or if you sell it in a course it would be great :(

  • @nickjunes
    @nickjunes Рік тому +1

    I'm a programmer of 20 years and I've been strongly questioning MVC lately especially on the backend. Mainly there is a lot more logic that needs to be shared. It's obvious services needed to be invented because it couldn't all be contained in the controller level, but it's still not good enough. The model layer is also outdated. It's just a thin layer to the DB so it shouldn't be given so much weight. Applications are no longer desktop apps that save data on a hardrive. We have lots of logic that needs to be shared between lots of services and controllers. We probably need something that is more along the lines of (Routes) | (Controllers) | (Logic -> Components -> Small Functions, External API Calls and Models). Top level in () and -> is nested. Logic is where the business logic is and it may call other peer elements at times. Components would only ever call lower in the tree.

    • @katalystcod2
      @katalystcod2 10 місяців тому

      so what do you propose? give a concrete example with file structure and logic?

    • @nickjunes
      @nickjunes 10 місяців тому

      ​@@katalystcod2Lately I have, Routes, Controllers, Services, and Utilities. I don't personally use a database folder because I always an ORM and database access doesn't require any complex connection logic. That's on the backend. If we're talking about the front end then a lot of people are using projects like Next.js where the routes are actually defined by the file location, then you might have a global Context folder where your "model" is but you don't call it that. Then you may also have "hooks" and "components" folders for re-usable logic.
      My main point is that on both the backend and the front end it makes more sense to organize things by what we actually need and what we're actually doing and that's how most modern projects are organized. Having an actual "model", "view", and "controller" folder isn't always necessary. It's more a general concept. Although I do use a controller folder on the backend. On the front end a "controller" folder isn't really necessary.

  • @inlinex
    @inlinex Рік тому

    Question... How Can you call the modules related to controller or you use a Shared Module.? I like Advanced Folder Structure

  • @nomchomppom
    @nomchomppom 3 роки тому +1

    hey, thanks for the video! would clerify what goes in the "service" folder? would this be someting like getting extra resources from another restAPI or even connecting with another webservice like optimizing photos etc?

  • @adventurer2395
    @adventurer2395 2 роки тому

    Thank you! Why would you do validation in the controller instead of the service? isn’t that business logic?

  • @laviray5447
    @laviray5447 7 місяців тому

    What I personally prefer is creating separate folder for each function/component like Auth, user, pages, etc.

  • @codesmiles_
    @codesmiles_ Рік тому

    I the advanced section of this video, what type of test is the test folder that sit alongside src be running

  • @anoopjoy501
    @anoopjoy501 2 роки тому

    What are the other popular design patterns?
    Apart from MVC

  • @jpee0316
    @jpee0316 2 роки тому

    And the validation folder is for? validation for like form inputs?

  • @mani_naik
    @mani_naik 3 роки тому +1

    new Intro

  • @maxmaksum4673
    @maxmaksum4673 3 роки тому +1

    excellent

  • @me_debankan4178
    @me_debankan4178 8 місяців тому

    for intermediate express api what will be present in the config folder ?

  • @theaxacall
    @theaxacall 3 роки тому

    hey hi
    I made an api with express. and the pictures are on the same port.. I can access the links of my pictures from a different server, but I can't show the pictures.

  • @bestblackpeoplevine7907
    @bestblackpeoplevine7907 3 роки тому

    can you do video on JEST / Testing

  • @mansilaad2062
    @mansilaad2062 3 роки тому +1

    What would be the folder structure for react large project where we call Apis as well as axios request etc..

    • @PedroTechnologies
      @PedroTechnologies  3 роки тому

      I want to make a video on react project structures! But I would create a personalized hook for making api calls!

  • @surajsingh3434
    @surajsingh3434 2 роки тому

    @PedroTech Now we have a Clean Architecture. That also needs your attention.

  • @mansilaad2062
    @mansilaad2062 3 роки тому

    What are different design patterns?

  • @dawid_dahl
    @dawid_dahl 3 роки тому +1

    You only mention validation in the controllers. I personally do my validation in a middleware. Does that mean that to divide up my files into controllers and services is unnecessary? Feels like there are more to controllers than validation.
    If you could shed some more light on controllers/services and how to think about that-if one is using that pattern, I know it is not a must-that would be really helpful. Thank you!

    • @PedroTechnologies
      @PedroTechnologies  3 роки тому +1

      I have a validation middleware too! I just create the YUP schema in the validations folder!

    • @dawid_dahl
      @dawid_dahl 3 роки тому

      That doesn’t answer my question, but thank you anyway.

  • @wasit-shafi
    @wasit-shafi 14 днів тому

    what if we have also have contents in v2 directory, then how will your directory structure change as we also have to make sure we are not repeating the code, eg you have put Helpers inside v1 . any comments on that...?

  • @franciscog.6396
    @franciscog.6396 3 роки тому +1

    Hi Pedro! Nice video. I have a question, how to upload a project with front and back to GitHub? Frontend and Backend in the same repository?

    • @franciscog.6396
      @franciscog.6396 3 роки тому +1

      In the project, I have the "client" folder (React Native), and the "server" folder (API REST with MySQL).

    • @PedroTechnologies
      @PedroTechnologies  3 роки тому +2

      I always recommend separating the repositories!

    • @PedroTechnologies
      @PedroTechnologies  3 роки тому +1

      I would separate the repos and upload the client to the google play store and the server to either aws, zeet, or heroku!

    • @franciscog.6396
      @franciscog.6396 3 роки тому

      @@PedroTechnologies thank you so much bro!

  • @PanlasangMotour
    @PanlasangMotour 3 роки тому +1

    Next Please Service workers :) PWA = Progressive web applications ;)

    • @PedroTechnologies
      @PedroTechnologies  3 роки тому +1

      I love PWA's so I can definitely make a video on it!

  • @khandoor7228
    @khandoor7228 3 роки тому +1

    How did you make that sweet intro? Pls do a video on that!

    • @PedroTechnologies
      @PedroTechnologies  3 роки тому

      Hahaha I didn’t make it! I paid an awesome person on fiver to make it for me. Trying to improve the video quality!

    • @khandoor7228
      @khandoor7228 3 роки тому

      @@PedroTechnologies ah gotcha good thinking

  • @skymer7471
    @skymer7471 Рік тому

    Shouldn't controllers, services & models be grouped together per "domain" (or entity)
    api>users>(user.service.ts, user.model.ts, user.controller.ts) ?
    When the project will grow it will be easier to find what you're searching for

  • @yohanneskindu8794
    @yohanneskindu8794 Рік тому +1

    Guys don't overcomplicate stuff, if you wanna have advanced folder structure, use nest js.

  • @sunilkumar-zf4dx
    @sunilkumar-zf4dx 2 роки тому +1

    nice video, can you put git links for these folder structures with some boilerplate code.

    • @PedroTechnologies
      @PedroTechnologies  2 роки тому +1

      This was a long time ago so I don't know if I still have the folder with all of this. But I can defo create one and put the link!

  • @flouainan
    @flouainan 4 місяці тому

    Hey bro, can you please tell the name of this VScode icon extension ?
    Brazilian hug 😎

  • @makermaker9525
    @makermaker9525 Рік тому

    Can you give me a links for projects that follow intermediate and advanced structure

  • @NewleadersTech
    @NewleadersTech 3 роки тому +1

    a new begining.

    • @PedroTechnologies
      @PedroTechnologies  3 роки тому

      Yes!!

    • @NewleadersTech
      @NewleadersTech 3 роки тому

      @@PedroTechnologies best of best supportive content .We are counting on you .Really appreciated.

  • @chaitany.a
    @chaitany.a 2 роки тому

    MVC is an architectural patter, not a design pattern

  • @otis3744
    @otis3744 3 місяці тому

    People love to say as a beginner dont…. Lmao as a beginner, do because no one cares who long you’ve been coding, they will expect baller level code from you from day 1

  • @xO_ADX_Ox
    @xO_ADX_Ox 2 роки тому

    Beginner here, I did not understand what it is used for .env =(

  • @dueft4479
    @dueft4479 Рік тому

    I don't like that you keep your versions in the repo.
    I would rather use github and add a commit or some kind of tag where I say that this is the v1 of the api.
    Then I can easily update to that commit if I need v1. But if I keep it in the repo there is a lot of dead code.
    On the one hand your approach is more comfortable, but the approach I would use is cleaner imo.

  • @amwpagon
    @amwpagon 2 роки тому

    i think ddd folder bester than mvc folder

  • @luksproject7142
    @luksproject7142 2 роки тому

    como tu conseguiu ficar sem sotaque?

  • @nickjunes
    @nickjunes Рік тому

    I've worked with a lot of projects that use typescript and don't. With good test coverage typescript really becomes obsolete and development time increases dramatically. As developers we need to always be aware of when a tool was invented just to give developers more to do with their time and when it is actually helpful. Introducing typescript increases the code quantity by 30% and increases the bug surface level by exactly double since every piece of code can now fail at the abstraction level as well. Until types are officially part of JavaScript it's always going to be just another failure point without any real affect on the outcome.-- but real slowdown on developer time.

  • @neotv15
    @neotv15 2 роки тому

    provide source code