如何使用GO和Nitric创建您的第一个API | Nitric和GO教程

今天,我们将深入研究一个令人兴奋的项目,我们将使用Nitric和 GO创建一个 Profile Management API 。

该 API 将处理用户配置文件的创建、更新和删除。然后我们将扩展它来管理个人资料图像。

  • 使用 Nitric 创建 API 来创建和更新配置文件

  • 为以下 API 操作创建处理程序

MethodRouteDescription
GET/profiles/[id]通过 ID 获取特定配置文件
GET/profiles列出所有配置文件
POST/profiles创建新的个人资料
DELETE/profiles/[id]删除个人资料
PUT/profiles/[id]更新个人资料
  • 本地运行进行测试

  • 部署到您选择的云

  • (可选)为以下 API 操作添加处理程序

MethodRouteDescription
GET/profiles/[id]/image/upload获取个人资料图片上传 URL
GETprofiles/[id]/image/download获取个人资料图片下载 URL
GETprofiles/[id]/image/view查看下载的图片

前提条件

  • Go(https://go.dev/dl/

  • Nitric CLI (https://nitric.io/docs/guides/getting-started/installation

  • AWS (https://aws.amazon.com/)、GCP(https://cloud.google.com/)或Azure帐户(https://azure.microsoft.com/)(您的选择)

Nitric介绍

Nitric 是一款工具,可帮助开发人员快速创建云应用程序(例如 AWS、Google Cloud 或 Microsoft Azure),并减少重复代码。它充当代码和云服务之间的桥梁,使构建和部署应用程序变得非常简单。

通过使用 Nitric,您可以更多地专注于构建应用程序,而不是关注云提供商的细节,并消除部署它所需的 Terraform(或其他 IaC)项目。

通过查看我的其他一些博客或访问文档来了解更多信息。(https://nitric.io/docs)

开始

我们首先为 API 创建一个新项目。

nitric new

创建一个项目,为其命名并选择您喜欢的入门模板。

? What is the name of the project? my-profile-api
? Choose a template: official/Go - Starter

接下来,在您选择的编辑器中打开项目。

cd my-profile-api

确保所有依赖项均已解决:

go mod tidy

脚手架项目应具有以下结构:

+--functions/
|  +-- hello/
|      +-- main.go
|  ...
+--nitric.yaml
+--go.mod
+--go.sum
+--.gitignore
+--README.md

您可以测试该项目以验证一切是否按预期工作:

nitric start

并在一个单独的终端中:

go run functions/hello


第一个命令使用 启动 Nitric Server nitric start,它
提供本地接口来模拟云资源。然后运行您的函数并允许它们连接。go run functions/hello

如果一切正常,您现在可以删除functions/文件夹中的所有文件,我们将在本指南中创建新功能。

构建配置文件 API

让我们开始构建配置文件 API。main.go在函数目录中创建一个名为的文件并添加以下内容:

package main

import (
  "fmt"

  "github.com/nitrictech/go-sdk/nitric"
)

func main() {
  profilesApi, err := nitric.NewApi("public")
  if err != nil {
    return
  }

  profiles, err := nitric.NewCollection("profiles").With(nitric.CollectionReading, nitric.CollectionWriting)
  if err != nil {
    return
  }

  if err := nitric.Run(); err != nil {
    fmt.Println(err)
  }
}

我们在这里创建:

  • 一个名为 的 API public,

  • 一个命名的集合profiles,并授予我们的函数读取和写入该集合的权限。

从这里开始,我们向该函数添加一些功能,以便我们可以使用配置文件。



如果您愿意, 您可以将部分或全部请求处理程序分离到它们自己的函数中。为简单起见,我们将在本指南中将它们组合在一起

使用 POST 创建配置文件

profilesApi.Post("/profiles", func(ctx *faas.HttpContext, next faas.HttpHandler) (*faas.HttpContext, error) {
  id := uuid.New().String()

  var profileRequest map[string]interface{}
  err := json.Unmarshal(ctx.Request.Data(), &profileRequest)
  if err != nil {
    return ctx, err
  }

  err = profiles.Doc(id).Set(ctx.Request.Context(), profileRequest)
  if err != nil {
    return ctx, err
  }

  ctx.Response.Body = []byte(id)

  return ctx, nil
})

使用 GET 检索配置文件

profilesApi.Get("/profiles/:id", func(ctx *faas.HttpContext, next faas.HttpHandler) (*faas.HttpContext, error) {
  id := ctx.Request.PathParams()["id"]

  profile, err := profiles.Doc(id).Get(ctx.Request.Context())
  if err != nil {
    ctx.Response.Status = 404
    ctx.Response.Body = []byte(fmt.Sprintf("profile with id '%s' not found", id))

    return ctx, nil
  }

  ctx.Response.Body, err = json.Marshal(profile.Content())

  return ctx, err
})

使用 GET 列出所有配置文件

profilesApi.Get("/profiles", func(ctx *faas.HttpContext, next faas.HttpHandler) (*faas.HttpContext, error) {
  profiles, err := profiles.Query().Fetch(ctx.Request.Context())
  if err != nil {
    return ctx, err
  }

  var profileContent []map[string]interface{}
  for _, doc := range profiles.Documents {
    profileContent = append(profileContent, doc.Content())
  }

  ctx.Response.Body, err = json.Marshal(profileContent)

  return ctx, err
})

使用 DELETE 删除配置文件

profilesApi.Delete("/profile/:id", func(ctx *faas.HttpContext, next faas.HttpHandler) (*faas.HttpContext, error) {
  id := ctx.Request.PathParams()["id"]

  err := profiles.Doc(id).Delete(ctx.Request.Context())
  if err != nil {
    ctx.Response.Status = 404
    ctx.Response.Body = []byte(fmt.Sprintf("profile with id '%s' not found", id))

    return ctx, nil
  }

  return ctx, nil
})

好吧,让我们运行这个东西!

现在您已经定义了一个 API,并为其每个方法定义了处理程序,是时候在本地测试它了。

nitric start

并在一个单独的终端中:

go run functions/hello

一旦启动,应用程序将通过 API 端口接收请求。您可以使用 cURL、Postman 或任何其他 HTTP 客户端来测试 API。

我们将保持它运行以进行测试。如果您想更新功能,只需保存它们,它们就会自动重新加载。

测试你的API

如果您在云上进行测试,请更新括号中的所有值[]并将 URL 更改为您部署的 URL。

创建个人资料

curl --location --request POST 'http://localhost:4001/profiles' \
--header 'Content-Type: text/plain' \
--data-raw '{
    "name": "Peter Parker",
    "age": "21",
    "homeTown" : "Queens"
}'

获取个人资料

curl --location --request GET 'http://localhost:4001/profiles/[id]'

获取所有配置文件

curl --location --request GET 'http://localhost:4001/profiles'

删除个人资料

curl --location --request DELETE 'http://localhost:4001/profiles/[id]'

部署到云端

此时,您可以将构建的内容部署到任何受支持的云提供商。为此,首先设置您的凭据以及您喜欢的云的任何配置:

  • AWS(https://nitric.io/docs/reference/providers/aws)

  • 天蓝色(https://nitric.io/docs/reference/providers/azure)

  • GCP(https://nitric.io/docs/reference/providers/gcp)

接下来,我们需要创建一个stack. 堆栈表示应用程序的已部署实例,它是项目中定义的资源的集合。您可能需要为每个环境使用单独的堆栈,例如dev、test和 的堆栈prod。现在,让我们从创建dev堆栈开始。

nitric stack new
? What do you want to call your new stack? dev
? Which Cloud do you wish to deploy to? aws
? select the region us-east-1

AWS

注意:您有责任遵守免费套餐的限制或与部署相关的任何费用。

我们调用了我们的堆栈dev,让我们尝试使用up命令部署它

nitric up
┌───────────────────────────────────────────────────────────────┐
| API  | Endpoint                                               |
| main | https://XXXXXXXX.execute-api.us-east-1.amazonaws.com   |
└───────────────────────────────────────────────────────────────┘

部署完成后,转到相关的云控制台,您将能够查看您的 API 并与之交互。

要从云中拆除您的应用程序,请使用以下down命令:

nitric down

可选 - 添加个人资料图片上传/下载支持

如果您想更深入地了解并使用 Nitric 创建一些其他资源,为什么不将图像添加到您的配置文件 API 中。

使用权限访问配置文件存储桶

定义一个profilesImg具有读/写权限的命名桶

profileImages, err := nitric.NewBucket("profileImages").With(nitric.BucketReading, nitric.BucketWriting)
if err != nil {
  fmt.Println(err)
  return
}

获取上传个人资料图片的 URL

profilesApi.Get("/profiles/:id/image/upload", func(ctx *faas.HttpContext, next faas.HttpHandler) (*faas.HttpContext, error) {
  id := ctx.Request.PathParams()["id"]
  photoId := fmt.Sprintf("images/%s/photo.png", id)

  photoUrl, err := profileImages.File(photoId).UploadUrl(ctx.Request.Context(), 600)
  if err != nil {
    return ctx, err
  }

  ctx.Response.Body = []byte(photoUrl)

  return ctx, nil
})

获取下载个人资料图片的 URL

profilesApi.Get("/profiles/:id/image/download", func(ctx *faas.HttpContext, next faas.HttpHandler) (*faas.HttpContext, error) {
  id := ctx.Request.PathParams()["id"]
  photoId := fmt.Sprintf("images/%s/photo.png", id)

  photoUrl, err := profileImages.File(photoId).DownloadUrl(ctx.Request.Context(), 600)
  if err != nil {
    return ctx, err
  }

  ctx.Response.Body = []byte(photoUrl)

  return ctx, nil
})

您也可以直接重定向到照片 URL。

profilesApi.Get("/profiles/:id/image/view", func(ctx *faas.HttpContext, next faas.HttpHandler) (*faas.HttpContext, error) {
  id := ctx.Request.PathParams()["id"]
  photoId := fmt.Sprintf("images/%s/photo.png", id)

  photoUrl, err := profileImages.File(photoId).DownloadUrl(ctx.Request.Context(), 600)
  if err != nil {
    return ctx, err
  }

  ctx.Response.Status = 303
  ctx.Response.Headers["Location"] = []string{photoUrl}

  return ctx, nil
})

是时候测试更新的 API 了

如果您在云上进行测试,请更新括号中的所有值[]并将 URL 更改为您部署的 URL。

获取图片上传URL

curl --location --request GET 'http://localhost:4001/profiles/[id]/image/upload'

通过curl 使用上传URL

curl --location --request PUT '[url]' \--header 'content-type: image/png' \--data-binary '@/home/user/Pictures/photo.png'

获取图片下载地址

curl --location --request GET 'http://localhost:4001/profiles/[id]/image/download'

包起来

在这次探索中,我们使用Nitric创建了一个配置文件管理 API ,处理核心配置文件操作,并将其扩展为图像管理。

事实证明,Nitric 是快速从想法转变为实时云托管 API 的可靠伴侣。现在轮到您扩展这个项目或与 Nitric 一起开始新的冒险了。

查看具体文档:(https://nitric.io/docs/guides/getting-started/go/serverless-rest-api-example)


文章来源地址https://www.toymoban.com/diary/golang/351.html

到此这篇关于如何使用GO和Nitric创建您的第一个API | Nitric和GO教程的文章就介绍到这了,更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

原文地址:https://www.toymoban.com/diary/golang/351.html

如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用
上一篇 2023年10月06日 23:44
下一篇 2023年10月07日 00:14

相关文章

  • 【Web3 系列开发教程——创建你的第一个 NFT(8)】如何开发一个成功的 NFT 项目 | NFT 社区建设技巧

    ⭐️ 本文首发自 前端修罗场(点击加入),是 一个由 资深开发者 独立运行 的专业技术社区 ,我专注 Web 技术、Web3、区块链、答疑解惑、面试辅导以及职业发展 。 博主创作的 《Web3 实战教程》(点击订阅) ,已经帮助许多开发者成功铸造 NFT,内容浅显易懂,能够快速对 W

    2024年02月05日
    浏览(64)
  • 【Web3 系列开发教程——创建你的第一个 NFT(5)】使用 Ethers.js 铸造 NFT | 测试用例

    本节文章将描述如何通过 ethers.js 库使用以太币在以太坊区块链上 铸造 NFT ,以及我们还会讨论如何对创建的 NFT 进行基础的 测试 。 在本文中,我们将实践一种可替代的方法:即使用 OpenZeppelin V4 库 以及 Ethers.js 以太坊库实现。 除此之前,还将介绍使用 Hardhat 和 Waffle 测试合

    2024年01月18日
    浏览(88)
  • 【Web3 系列开发教程——创建你的第一个 NFT(3)】开始创建 NFT

    本文将引导你使用以太坊和星际文件系统 (IPFS) 编写和部署不可替代 (ERC721) 代币智能合约。 星际文件系统 IPFS 是一个旨在 实现文件的分布式存储、共享和持久化的网络传输协议 。它是一种内容可寻址的对等超媒体分发协议。在IPFS网络中的节点构成一个分布式文件系统。它是

    2023年04月08日
    浏览(70)
  • 【Web3 系列开发教程——创建你的第一个 NFT(7)】创建一个 NFT DApp,给你的 NFT 赋予属性,例如图片

    在本文中,你将构建一个 NFT 铸币机,并学习如何通过使用 Metamask 和 Web3 工具将你的智能合约连接到 React 前端,来创建一个NFT dApp。 我认为,对于具备 Web2 开发背景的开发者来说,最大的挑战之一是 弄清楚如何将你的智能合约连接到前端项目并与之交互。 通过构建 NFT 铸币

    2024年01月16日
    浏览(67)
  • Docker第十八章 : 构建您的第一个Java镜像

    第十八章 : 构建您的第一个Java镜像 本章知识点: 介绍构建java镜像的基本步骤,以及如何通过阿里云效和阿里云容器镜像服务,构建您的第一个Java镜像。 导读 Java入门指南教您如何使用Docker创建容器化的Spring Boot应用程序。在本模块中,您将学习如何: 使用Maven克隆并运行

    2024年02月22日
    浏览(56)
  • 【Web3 系列开发教程——创建你的第一个 NFT(6)】为 NFT 设置价格

    我想作为 NFT 的创建者,你可能有意将你的 NFT 出售给你的 NFT 爱好者。 为此,我们需要为 NFT 定价,一般有两种主要的定价方式: 在智能合约内定价(本文所讲) 在 NFT 市场或平台上列出你的 NFT(更流行的方法) 注意: 在前面 NFT 创建教程的第 10 步中(回看之前的文章),

    2023年04月26日
    浏览(63)
  • 【图像处理】经营您的第一个U-Net以进行图像分割

            AI厨师们,今天您将学习如何准备计算机视觉中最重要的食谱之一:U-Net。本文将叙述:1 语义与实例分割,2 图像分割中还使用了其他损失,例如Jaccard损失,焦点损失;3 如果2D图像分割对您来说太容易了,您可以查看3D图像分割,因为模型要大得多,因此要困难得

    2024年02月15日
    浏览(56)
  • 生成式人工智能聊天黑客松导学系列 - 用 Python 构建您的第一个 RAG 应用

    点击蓝字 关注我们 编辑:Alan Wang 排版:Rani Sun 活动简介 在过去半年,我们有数以百计的开发人员使用 Python 结合不同领域的知识构建基于人工智能的聊天应用程序。用户只需要通过简单提问就可以使用 RAG(检索增强生成)从 LLM 模型获取专业的知识回答。 我们也从不少传统

    2024年02月21日
    浏览(74)
  • Kibana:创建你的第一个仪表板

    了解从你自己的数据创建仪表板的最常用方法。 本教程将从分析师查看网站日志的角度使用示例数据,但这种类型的仪表板适用于任何类型的数据。 完成后,你将全面了解示例 Web 日志数据。 在本次的展示中,我将使用最新的 Elastic Stack 8.7.1 来进行展示。 Kibana:创建你的第

    2024年02月06日
    浏览(89)
  • API管理风险:如何确保您的API安全与可靠?

    随着数字化时代的到来,应用程序接口(API)在现代软件开发中发挥着关键的作用。然而,API管理过程中存在着各种潜在的风险。本文将探讨如何有效地管理和缓解这些风险,以确保您的API安全、可靠并能够满足业务需求。 API是软件系统之间进行通信和数据交换的桥梁,它允

    2024年02月11日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包