You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
<!doctype html><htmllang=en-US><head><metacharset=utf-8><metaname=viewportcontent="width=device-width,initial-scale=1"><metaname=descriptioncontent="Cloud Native Go Tutorials for Everyone!"><metaname=authorcontent="Dumindu Madunuwan"><metaname=theme-colorcontent="#ffffff" media="(prefers-color-scheme: light)"><metaname=theme-colorcontent="#101010" media="(prefers-color-scheme: dark)"><title>Building a Dockerized RESTful API application in Go Β· Learning Cloud Native Go</title>
2
-
<linkrel=canonicalhref=https://learning-cloud-native-go.github.io/docs/building-a-dockerized-restful-api-application-in-go/><linkrel=stylesheethref=/assets/css/docs.min.8e9408609771a441499aa5571a4585b0ca95783b842d5c758af5eef1457b0fe0.cssintegrity><linkrel=manifesthref=/manifest.json><linkrel=iconhref=/favicon/favicon.ico><linkrel=iconhref=/favicon/favicon-16x16.pngsizes=16x16type=image/png><linkrel=iconhref=/favicon/favicon-32x32.pngsizes=32x32type=image/png><linkrel=apple-touch-iconhref=/favicon/apple-touch-icon.pngsizes=180x180><scriptasyncsrc="https://www.googletagmanager.com/gtag/js?id=G-H3GD0XFJ42"></script><script>window.dataLayer=window.dataLayer||[];functiongtag(){dataLayer.push(arguments)}gtag("js",newDate),gtag("config","G-H3GD0XFJ42")</script><metaproperty="og:title" content="Building a Dockerized RESTful API application in Go"><metaproperty="og:description" content="Cloud Native Go Tutorials for Everyone!"><metaproperty="og:type" content="article"><metaproperty="og:url" content="https://learning-cloud-native-go.github.io/docs/building-a-dockerized-restful-api-application-in-go/"><metaproperty="og:image" content="https://learning-cloud-native-go.github.io/docs/building-a-dockerized-restful-api-application-in-go/og.png"><metaproperty="og:site_name" content="Learning Cloud Native Go"><metaname=twitter:cardcontent="summary_large_image"><metaname=twitter:titlecontent="Building a Dockerized RESTful API application in Go"><metaname=twitter:descriptioncontent="Cloud Native Go Tutorials for Everyone!"><metaname=twitter:imagecontent="https://learning-cloud-native-go.github.io/docs/building-a-dockerized-restful-api-application-in-go/og.png"><scripttype=application/ld+json>{"@context":"https://schema.org","@type":"Article","headline":"Building a Dockerized RESTful API application in Go","description":"Cloud Native Go Tutorials for Everyone!","image":"https:\/\/learning-cloud-native-go.github.io\/docs\/building-a-dockerized-restful-api-application-in-go\/og.png","author":{"@type":"Person","name":"map[name:Dumindu Madunuwan url:https:\/\/github.com\/dumindu]"},"publisher":{"@type":"Organization","name":"Learning Cloud Native Go","logo":{"@type":"ImageObject","url":"https:\/\/learning-cloud-native-go.github.io\/"}},"datePublished":"0001-01-01","dateModified":"2024-01-21","mainEntityOfPage":{"@type":"WebPage","@id":"https:\/\/learning-cloud-native-go.github.io\/docs\/building-a-dockerized-restful-api-application-in-go\/"}}</script></head><body><divid=outer-wrapper><divid=aside-wrapper><aside><div><buttonclass=btn><i>β</i>Close</button></div><ahref=https://learning-cloud-native-go.github.io/class=site-logo>Learning Cloud Native Go</a><navrole=navigation><detailsopen><summary>Documentation</summary><ul><li><ahref=https://learning-cloud-native-go.github.io/docs/overview/>Overview</a></li></ul></details><detailsopen><summary>Building a Dockerized RESTful API</summary><ul><li><aclass=activehref=https://learning-cloud-native-go.github.io/docs/building-a-dockerized-restful-api-application-in-go/>Building a Dockerized RESTful API application in Go</a></li><li><ahref=https://learning-cloud-native-go.github.io/docs/hello-world-server/>Hello World server</a></li><li><ahref=https://learning-cloud-native-go.github.io/docs/database-and-migrations/>Database and migrations</a></li><li><ahref=https://learning-cloud-native-go.github.io/docs/configurations/>Configurations</a></li><li><ahref=https://learning-cloud-native-go.github.io/docs/routes-and-openapi-specification/>Routes and OpenAPI specification</a></li><li><ahref=https://learning-cloud-native-go.github.io/docs/repository/>Repository</a></li><li><ahref=https://learning-cloud-native-go.github.io/docs/error-handling/>Error handling</a></li></ul></details></nav></aside></div><divid=content-wrapper><header><ahref=https://learning-cloud-native-go.github.io/class=site-logo>Learning Cloud Native Go</a></header><main><article><nav><buttonclass=btn><i>β¬ οΈ</i> On this section</button>
3
-
<buttonclass=btn>On this page <i>β‘οΈ</i></button></nav><header><h1>Building a Dockerized RESTful API application in Go</h1><p></p></header><divid=article-body><blockquoteclass=info><p><strong>π¨βπ«</strong><strong>In this series…</strong></p><p>In this series, we are going to build a Dockerized Go RESTful API for a bookshelf with these steps:</p><ul><li>Create a basic server using Go’s <code>net/http</code> package and Dockerize it.</li><li>Add the database, SQL migration files, and create the <code>migrate</code> app to run these migration files.</li><li>Implement dynamic application configurations via environment variables.</li><li>Integrate Chi, add initial API routes, and generate OpenAPI specifications.</li><li>Integrate GORM, implement repository functions with tests, and invoke repository from the handlers.</li><li>Enhance error handling and integrate Validator v10 for form validations.</li><li>Implement error logs and request logs via Zerolog.</li></ul></blockquote><h2id=-the-codebase>π¦ The codebase</h2><p>The completed API application supports the following API endpoints.</p><table><thead><tr><th>Name</th><th>HTTP Method</th><th>Route</th></tr></thead><tbody><tr><td>Health</td><td>GET</td><td>/livez</td></tr><tr><td>List Books</td><td>GET</td><td>/v1/books</td></tr><tr><td>Create Book</td><td>POST</td><td>/v1/books</td></tr><tr><td>Read Book</td><td>GET</td><td>/v1/books/{id}</td></tr><tr><td>Update Book</td><td>PUT</td><td>/v1/books/{id}</td></tr><tr><td>Delete Book</td><td>DELETE</td><td>/v1/books/{id}</td></tr></tbody></table><p>The sourcecode of the completed project can be found in <ahref=http://github.com/learning-cloud-native-go/myapptarget=_blank>learning-cloud-native-go/myapp</a> GitHub repository.</p><p>OK, Let’s get it started!</p></div><footer><timedatetime=2024-01-21><i>π</i> Updated: 2024-01-21</time>
<ahref=https://learning-cloud-native-go.github.io/docs/hello-world-server/>Next <i>οΉ₯</i></a></footer></article><aside><div><buttonclass=btn><i>β</i>Close</button></div><strong>On this page</strong><navid=TableOfContents><ul><li><ahref=#-the-codebase>π¦ The codebase</a></li></ul></nav></aside></main><footer><div><i>π§βπ»</i>Built by and copyright<ahref=https://github.com/dumindutarget=_blank>Dumindu Madunuwan</a><i>π </i> 2019-2025<i>π</i><ahref=https://github.com/learning-cloud-native-gotarget=_blank>GitHub</a></div><div><buttonclass=btn><i>βοΈ</i><i>β</i><i>π</i></button></div></footer></div></div><divid=body-model-outer></div><scripttype=text/javascriptsrc=/assets/js/docs.min.12ffdc25c0149ef34e761ee54587f2aae17affcb8375298ad2180851930cb142.jsintegrity></script></body></html>
1
+
<!doctype html><htmllang=en-US><head><metacharset=utf-8><metaname=viewportcontent="width=device-width,initial-scale=1"><metaname=descriptioncontent="Cloud Native Go Tutorials for Everyone!"><metaname=authorcontent="Dumindu Madunuwan"><metaname=theme-colorcontent="#ffffff" media="(prefers-color-scheme: light)"><metaname=theme-colorcontent="#101010" media="(prefers-color-scheme: dark)"><title>Building a Dockerized RESTful API application in Go Β· Learning Cloud Native Go</title><linkrel=canonicalhref=https://learning-cloud-native-go.github.io/docs/building-a-dockerized-restful-api-application-in-go/><linkrel=stylesheethref=/assets/css/docs.min.80f8327279817daa4da4a6824ddfeed423ae86fbbd5c77a6b96e67974a6f4131.cssintegrity><linkrel=manifesthref=/manifest.json><linkrel=iconhref=/favicon/favicon.ico><linkrel=iconhref=/favicon/favicon-16x16.pngsizes=16x16type=image/png><linkrel=iconhref=/favicon/favicon-32x32.pngsizes=32x32type=image/png><linkrel=apple-touch-iconhref=/favicon/apple-touch-icon.pngsizes=180x180><scriptasyncsrc="https://www.googletagmanager.com/gtag/js?id=G-H3GD0XFJ42"></script><script>window.dataLayer=window.dataLayer||[];functiongtag(){dataLayer.push(arguments)}gtag("js",newDate),gtag("config","G-H3GD0XFJ42")</script><metaproperty="og:title" content="Building a Dockerized RESTful API application in Go"><metaproperty="og:description" content="Building a Dockerized RESTful API application in Go - Cloud Native Go Tutorials for Everyone!"><metaproperty="og:type" content="article"><metaproperty="og:url" content="https://learning-cloud-native-go.github.io/docs/building-a-dockerized-restful-api-application-in-go/"><metaproperty="og:image" content="https://learning-cloud-native-go.github.io/docs/building-a-dockerized-restful-api-application-in-go/og.png"><metaproperty="og:site_name" content="Learning Cloud Native Go"><metaname=twitter:cardcontent="summary_large_image"><metaname=twitter:titlecontent="Building a Dockerized RESTful API application in Go"><metaname=twitter:descriptioncontent="Building a Dockerized RESTful API application in Go - Cloud Native Go Tutorials for Everyone!"><metaname=twitter:imagecontent="https://learning-cloud-native-go.github.io/docs/building-a-dockerized-restful-api-application-in-go/og.png"><scripttype=application/ld+json>{"@context":"https://schema.org","@type":"Article","headline":"Building a Dockerized RESTful API application in Go","description":"Building a Dockerized RESTful API application in Go - Cloud Native Go Tutorials for Everyone!","image":"https:\/\/learning-cloud-native-go.github.io\/docs\/building-a-dockerized-restful-api-application-in-go\/og.png","author":{"@type":"Person","name":"Dumindu Madunuwan","url":"https:\/\/github.com\/dumindu"},"publisher":{"@type":"Organization","name":"Learning Cloud Native Go","logo":{"@type":"ImageObject","url":"https:\/\/learning-cloud-native-go.github.io\/"}},"dateModified":"2024-01-21T18:12:51Z","mainEntityOfPage":{"@type":"WebPage","@id":"https:\/\/learning-cloud-native-go.github.io\/docs\/building-a-dockerized-restful-api-application-in-go\/"}}</script></head><body><divid=outer-wrapper><divid=aside-wrapper><aside><div><buttonclass=btn><i>β</i>Close</button></div><ahref=https://learning-cloud-native-go.github.io/class=site-logo>Learning Cloud Native Go</a><navrole=navigation><detailsopen><summary>Documentation</summary><ul><li><ahref=https://learning-cloud-native-go.github.io/docs/overview/>Overview</a></li></ul></details><detailsopen><summary>Building a Dockerized RESTful API</summary><ul><li><aclass=activehref=https://learning-cloud-native-go.github.io/docs/building-a-dockerized-restful-api-application-in-go/>Building a Dockerized RESTful API application in Go</a></li><li><ahref=https://learning-cloud-native-go.github.io/docs/hello-world-server/>Hello World server</a></li><li><ahref=https://learning-cloud-native-go.github.io/docs/database-and-migrations/>Database and migrations</a></li><li><ahref=https://learning-cloud-native-go.github.io/docs/configurations/>Configurations</a></li><li><ahref=https://learning-cloud-native-go.github.io/docs/routes-and-openapi-specification/>Routes and OpenAPI specification</a></li><li><ahref=https://learning-cloud-native-go.github.io/docs/repository/>Repository</a></li><li><ahref=https://learning-cloud-native-go.github.io/docs/error-handling/>Error handling</a></li></ul></details></nav></aside></div><divid=content-wrapper><header><ahref=https://learning-cloud-native-go.github.io/class=site-logo>Learning Cloud Native Go</a></header><navrole=navigation><selectonchange="this.value&&(window.location.href=this.value)"><button>
2
+
<selectedcontent></selectedcontent></button><optionvalue=https://learning-cloud-native-go.github.io/><spanaria-hidden><iaria-hidden>π‘ </i></span><span>Home</span></option><optionvalue=https://learning-cloud-native-go.github.io/docs/selected><spanaria-hidden><iaria-hidden>π </i></span><span>Documentation</span></option></select></nav><main><article><nav><buttonclass=btn><i>β¬ οΈ</i> On this section</button>
3
+
<buttonclass=btn>On this page <i>β‘οΈ</i></button></nav><header><h1>Building a Dockerized RESTful API application in Go</h1></header><divid=article-body><blockquoteclass=info><p><strong>π¨βπ«</strong><strong>In this series…</strong></p><p>In this series, we are going to build a Dockerized Go RESTful API for a bookshelf with these steps:</p><ul><li>Create a basic server using Go’s <code>net/http</code> package and Dockerize it.</li><li>Add the database, SQL migration files, and create the <code>migrate</code> app to run these migration files.</li><li>Implement dynamic application configurations via environment variables.</li><li>Integrate Chi, add initial API routes, and generate OpenAPI specifications.</li><li>Integrate GORM, implement repository functions with tests, and invoke repository from the handlers.</li><li>Enhance error handling and integrate Validator v10 for form validations.</li><li>Implement error logs and request logs via Zerolog.</li></ul></blockquote><h2id=-the-codebase>π¦ The codebase</h2><p>The completed API application supports the following API endpoints.</p><table><thead><tr><th>Name</th><th>HTTP Method</th><th>Route</th></tr></thead><tbody><tr><td>Health</td><td>GET</td><td>/livez</td></tr><tr><td>List Books</td><td>GET</td><td>/v1/books</td></tr><tr><td>Create Book</td><td>POST</td><td>/v1/books</td></tr><tr><td>Read Book</td><td>GET</td><td>/v1/books/{id}</td></tr><tr><td>Update Book</td><td>PUT</td><td>/v1/books/{id}</td></tr><tr><td>Delete Book</td><td>DELETE</td><td>/v1/books/{id}</td></tr></tbody></table><p>The sourcecode of the completed project can be found in <ahref=http://github.com/learning-cloud-native-go/myapptarget=_blank>learning-cloud-native-go/myapp</a> GitHub repository.</p><p>OK, Let’s get it started!</p></div><footer><timedatetime=2024-01-21><i>π</i> Updated: 2024-01-21</time>
<ahref=https://learning-cloud-native-go.github.io/docs/hello-world-server/>Next <i>›</i></a></footer></article><aside><div><buttonclass=btn><i>β</i>Close</button></div><strong>On this page</strong><navid=TableOfContents><ul><li><ahref=#-the-codebase>π¦ The codebase</a></li></ul></nav></aside></main><footer><div><i>π§βπ»</i>Built by and copyright<ahref=https://github.com/dumindutarget=_blank>Dumindu Madunuwan</a><i>π </i> 2019-2025<i>π</i><ahref=https://github.com/learning-cloud-native-gotarget=_blank>GitHub</a></div><div><buttonclass=btn><i>βοΈ</i><i>β</i><i>π</i></button></div></footer></div></div><divid=body-model-outer></div><scripttype=text/javascriptsrc=/assets/js/docs.min.bb7187d7b0d361897c27b4f61653c7152f6c633ccc12981b2a0eca4a986cc54d.jsintegrity></script></body></html>
0 commit comments