{"id":13713248,"url":"https://github.com/nicholasjackson/building-microservices-youtube","last_synced_at":"2025-05-15T10:03:07.065Z","repository":{"id":38398325,"uuid":"234249568","full_name":"nicholasjackson/building-microservices-youtube","owner":"nicholasjackson","description":"Code repository for my Building Microservices YouTube series https://www.youtube.com/playlist?list=PLmD8u-IFdreyh6EUfevBcbiuCKzFk0EW_","archived":false,"fork":false,"pushed_at":"2024-07-14T12:56:11.000Z","size":4286,"stargazers_count":1130,"open_issues_count":46,"forks_count":346,"subscribers_count":50,"default_branch":"main","last_synced_at":"2025-04-11T19:59:24.639Z","etag":null,"topics":["go","microservices"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nicholasjackson.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-01-16T06:18:59.000Z","updated_at":"2025-04-11T10:51:44.000Z","dependencies_parsed_at":"2024-12-26T06:16:34.558Z","dependency_job_id":null,"html_url":"https://github.com/nicholasjackson/building-microservices-youtube","commit_stats":{"total_commits":45,"total_committers":4,"mean_commits":11.25,"dds":0.1333333333333333,"last_synced_commit":"0cd586295712a80654ac94f929444b106423c1f0"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nicholasjackson%2Fbuilding-microservices-youtube","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nicholasjackson%2Fbuilding-microservices-youtube/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nicholasjackson%2Fbuilding-microservices-youtube/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nicholasjackson%2Fbuilding-microservices-youtube/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nicholasjackson","download_url":"https://codeload.github.com/nicholasjackson/building-microservices-youtube/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254319716,"owners_count":22051072,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["go","microservices"],"created_at":"2024-08-02T23:01:30.666Z","updated_at":"2025-05-15T10:03:00.378Z","avatar_url":"https://github.com/nicholasjackson.png","language":"Go","funding_links":[],"categories":["Repositories","Go"],"sub_categories":[],"readme":"#  Building Microservices in Go YouTube\nCode repository for my Building Microservices YouTube series \n[https://www.youtube.com/playlist?list=PLmD8u-IFdreyh6EUfevBcbiuCKzFk0EW_](https://www.youtube.com/playlist?list=PLmD8u-IFdreyh6EUfevBcbiuCKzFk0EW_)\n\nWeek by week Building Microservices builds on the previous weeks code teaching you how to build a multi-tier microservice system. The code structure for the course is one of a mono repo. To make it simple to follow along, each episode has its own branch showing progress to date.\n\nGet $100 dollars of Digital Ocean credits, valid for 90 days with my referal link. Not needed for the YouTube tutorials, but helps me pay for my own servers.\n\n\u003ca href=\"https://www.digitalocean.com/?refcode=c6dee99fad25\u0026utm_campaign=Referral_Invite\u0026utm_medium=Referral_Program\u0026utm_source=badge\"\u003e\u003cimg src=\"https://web-platforms.sfo2.cdn.digitaloceanspaces.com/WWW/Badge%201.svg\" alt=\"DigitalOcean Referral Badge\" /\u003e\u003c/a\u003e\n\nhttps://m.do.co/c/c6dee99fad25\n\n## Services\n\n### Product API [./product-api](./product-api)\nRESTful Go based JSON API built using the Gorilla framework. The API allows CRUD based operations on a product list.\n\n### Frontend website [./frontend](./frontend)\nReactJS website for presenting the Product API information.\n\n### Currency [./currency](./currency)\ngRPC service supporting simple Unaray and Bidirectional streaming methods.\n\n### Product Images [./product-images](./product-images)\nGo based image service supporting Gzipped content, multi-part forms and a RESTful \napproach for uploading and downloading images.\n\n## Series Content\n\nOver the weeks we will look at the following topics, teaching you everything you need to know regarding building microservices with the go programming language:\n\n- Introduction to microservices\n- RESTFul microservices\n- gRPC microservices\n- Packaging applications with Docker\n- Testing microservice\n- Continuous Delivery\n- Observability\n- Using Kubernetes\n- Debugging\n- Security\n- Asynchronous microservices\n- Caching\n- Microservice reliability using a Service Mesh\n\n\n## Episode 1 - Building a simple microservice\n\n### [https://youtu.be/VzBGi_n65iU](https://youtu.be/VzBGi_n65iU)\n\n### Branch: [episode_1](https://github.com/nicholasjackson/building-microservices-youtube/tree/episode_1)\n\nIn this episode I show you how to build the simplest service you can using the standard packages in the Go programming language. \n\n\n## Episode 2 - Building a simple microservice, continued\n\n### [https://youtu.be/hodOppKJm5Y](https://youtu.be/hodOppKJm5Y)\n\n### Branch: [episode_2](https://github.com/nicholasjackson/building-microservices-youtube/tree/episode_2)\n\nIn this episode we learn more about the standard library and look at how we can refactor last episodes example into a reusable microservice pattern.\n\n\n## Episode 3 - RESTFul microservices\n\n### [https://youtu.be/eBeqtmrvVpg](https://youtu.be/eBeqtmrvVpg)\n\n### Branch: [episode_3](https://github.com/nicholasjackson/building-microservices-youtube/tree/episode_3)\n\nIn this episode we start to learn about RESTFul services and reading and writing data using the JSON format.\n\n\n## Episode 4 - RESTful microservices\n\n### [https://youtu.be/UZbHLVsjpF0](https://youtu.be/UZbHLVsjpF0)\n\n### Branch [episode_4](https://github.com/nicholasjackson/building-microservices-youtube/tree/episode_4)\n\nWe continue to look at how you can implement RESTFul services with the Standard API\n\n\n## Episode 5 - Gorilla toolkit\n\n### [https://youtu.be/DD3JlT_u0DM](https://youtu.be/DD3JlT_u0DM)\n\n### Branch [episode_5](https://github.com/nicholasjackson/building-microservices-youtube/tree/episode_5)\n\nIn this epsode we refactor our Standard library RESTful service and start to implement the Gorill toolkit for routing.\n\n\n## Episode 6 - JSON Validation\n\n### [https://youtu.be/gE8_-8KoOLc](https://youtu.be/gE8_-8KoOLc)\n\n### Branch [episode_6](https://github.com/nicholasjackson/building-microservices-youtube/tree/episode_6)\n\nIn this episode we will look at the Go Validator package and how it can be used to validate JSON.\n\n\n## Episode 7 - Documenting APIs with Swagger\n\n### [https://youtu.be/07XhTqE-j8k](https://youtu.be/07XhTqE-j8k)\n\n### Branch [episode_7](https://github.com/nicholasjackson/building-microservices-youtube/tree/episode_7)\n\nThis epsiode shows you how you can document the API we have been building over the last couple of weeks. As a bonus we will also look at how we can embed ReDoc to build a nice documentation API direct into our service.\n\n\n## Episode 8 - Auto-generating HTTP client code from Swagger documentation\n\n### [https://youtu.be/Zn4joNjqBFc](https://youtu.be/Zn4joNjqBFc)\n\n### Branch [episode_8](https://github.com/nicholasjackson/building-microservices-youtube/tree/episode_8)\n\nIn this episode we look at how we can use the Swagger API documentation we created in the last episode and generate a Go client SDK. As it turns out I had a little bug in my code\nhope you all find the process of debugging this and finding root cause useful too.\n\n\n## Episode 9 - CORS (Cross-Origin Resource Sharing)\n\n### [https://youtu.be/RlYoy_RiYPw](https://youtu.be/RlYoy_RiYPw)\n\n### Branch [episode_9](https://github.com/nicholasjackson/building-microservices-youtube/tree/episode_9)\n\nIn this episode we are going to take a look at CORS (Cross-Origin Resource Sharing). CORS is a security feature built into web browsers which restricts upstream requests to sites on different domains. We look at a typical example of a React website on one domain calling a back end API, see the impact of CORS and how to solve it.\n\n\n## Episode 10 - Serving and uploading files\n\n### [https://youtu.be/ctmhYJpGsgU](https://youtu.be/ctmhYJpGsgU)\n\n### Branch [episode_10](https://github.com/nicholasjackson/building-microservices-youtube/tree/episode_10)\n\nIn this episode you will learn how to upload and serve files using the Go standard library.\n\n\n## Episode 11 - Handling multi-part form uploads\n\n### [https://youtu.be/_7-IhHMptNo](https://youtu.be/_7-IhHMptNo)\n\n### Branch [episode_11](https://github.com/nicholasjackson/building-microservices-youtube/tree/episode_11)\n\nIn this episode you will learn how to handle multi-part form uploads. Mult-part forms used to be common place as they are the basic way that browsers would upload data to a server. This pattern has fallen out of fashion as most moder data transfer to the server is done using XHR requests. There might still be a case when you need to know this though.\n\n\n## Episode 12 - Using Gzip compression for HTTP responses\n\n### [https://youtu.be/GtSg1H7SU5Y](https://youtu.be/GtSg1H7SU5Y)\n\n### Branch [episode_12](https://github.com/nicholasjackson/building-microservices-youtube/tree/episode_12)\n\nIn this episode we walk through how to wrap a http.ResponseWriter to enable Gzip compression for HTTP responses.\n\nHTTP Headers Accept-Encoding:\nhttps://developer.mozilla.org/en-US/d...\n\nHTTP ResponseWriter:\nhttps://golang.org/pkg/net/http/#Resp...\n\n\n## Episode 13 - Introduction to gRPC and Protocol Buffers\n\ngRPC is a high performance framework for client server applications. It is designed to be cross platform and is an awesome alternative to RESTful services.\n\nIn this episode we take a quick look at gRPC and Protocol Buffers, and how you can use them to build a simple API. This is the first video in a series of content where we dig into gRPC services.\n\ngRPC Framework:\nhttps://grpc.io/\n\nProtocol Buffers v3 Language Guide:\nhttps://developers.google.com/protocol-buffers/docs/proto3\n\nProtocol Buffers v3 Encoding format:\nhttps://developers.google.com/protocol-buffers/docs/encoding\n\n### [https://youtu.be/pMgty_RYIOc](https://youtu.be/pMgty_RYIOc)\n\n\n### Branch [episode_13](https://github.com/nicholasjackson/building-microservices-youtube/tree/episode_13)\n\n\n## Episode 14 - gRPC Client Connections\n\nIn this episode we take a quick look at how you can connect to gRPC services in Go.\n\nProtocol Buffers Enum Specification:\nhttps://developers.google.com/protocol-buffers/docs/reference/proto3-spec#enum_definition\n\ngRPC Creating gRPC Clients:\nhttps://grpc.io/docs/tutorials/basic/go/#client\n\n### [https://youtu.be/oTBcd5J0VYU](https://youtu.be/oTBcd5J0VYU)\n\n### Branch [episode_14](https://github.com/nicholasjackson/building-microservices-youtube/tree/episode_14)\n\n\n## Episode 15 - Refactoring Part 1/3\n\nThis video is part 1 of 3 where we start to clean up the code base a little before continuing to develop our gRPC service. Refactoring is a natural part of software development, it is difficult to get things right first time all the time. Rather than spend too much time on the perfect solution I like to go with the flow and clean up at a later date.\n\nAs part of our refactoring we look at the encoding/xml and how it is very similar in use to encoding/json.\n\nEncoding/XML:\nhttps://golang.org/pkg/encoding/xml/\n\n### [https://youtu.be/Vl88R9acq-Y](https://youtu.be/Vl88R9acq-Y)\n\n### Branch [episode_15_1](https://github.com/nicholasjackson/building-microservices-youtube/tree/episode_15_1)\n\n\n## Episode 15 - Refactoring Part 2/3\n\nIn this episode I continue to refactor the code base so far. These videos are really just intended to ensure that you are not completely confused when looking at the source code changes between episode 14 and episode 16.\n\nSource Code:\nhttps://github.com/nicholasjackson/building-microservices-youtube/tree/episode_15_2\n\nEncoding/XML:\nhttps://golang.org/pkg/encoding/xml/\n\n### [https://youtu.be/QBl8LZ0Rems](https://youtu.be/QBl8LZ0Rems)\n\n### Branch [episode_15_2](https://github.com/nicholasjackson/building-microservices-youtube/tree/episode_15_2)\n\n## Episode 15 - Refactoring Part 3/3\n\nIn this episode I finalize the refactoring for the code base.\n\n### [https://youtu.be/ARvOyAsuFog](https://youtu.be/ARvOyAsuFog)\n\n### Branch [episode_15_2](https://github.com/nicholasjackson/building-microservices-youtube/tree/episode_15_2)\n\n\n## Episode 16 - gRPC Bi-directional streaming, part 1/2\n\nIn this video we start to look at gRPC bi-directional streaming\n\ngRPC streaming allows you to independently receive streamed messages from the client and send a response to it. This episode looks at the basics of streaming API by adding an update to our currency service.\n\nServer-side streaming:\nhttps://grpc.io/docs/languages/go/basics/#server-side-streaming-rpc\n\nClient-side streaming:\nhttps://grpc.io/docs/languages/go/basics/#client-side-streaming-rpc\n\n### [https://youtu.be/4ohwkWVgEZM](https://youtu.be/4ohwkWVgEZM)\n\n### Branch [episode_16](https://github.com/nicholasjackson/building-microservices-youtube/tree/episode_16)\n\n\n## Episode 17 - gRPC Bi-directional streaming, part 2/2\n\nIn this video we continue to look at gRPC bi-directional streaming.\n\nYou will see how to take the simple example in the first part and how it can be implemented into the Products API to support\nindependent client and server streams. The simple example allows a client in the Product API to subscribe for currency\nrate changes in the Currency service. Whenever a rate changes the currency service broadcasts this change to all\ninterested subscribers. \n\nServer-side streaming:\nhttps://grpc.io/docs/languages/go/basics/#server-side-streaming-rpc\n\nClient-side streaming:\nhttps://grpc.io/docs/languages/go/basics/#client-side-streaming-rpc\n\n### [https://youtu.be/MT5tXSKa-KY](https://youtu.be/MT5tXSKa-KY)\n\n### Branch [episode_17](https://github.com/nicholasjackson/building-microservices-youtube/tree/episode_17)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnicholasjackson%2Fbuilding-microservices-youtube","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnicholasjackson%2Fbuilding-microservices-youtube","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnicholasjackson%2Fbuilding-microservices-youtube/lists"}