发布于 2026-01-06 2 阅读
0

使用 .NET 和 Appwrite 构建待办事项 API .NET + Appwrite Todo API

使用 .NET 和 Appwrite 构建待办事项 API

.NET + Appwrite Todo API

上周,Appwrite 发布了 .NET SDK 的 Beta 版本,旨在支持使用 C# 和 .NET 更高效、更便捷地构建服务器端应用程序。这个消息让我非常兴奋,因为 .NET 和 C# 都是我最喜欢的技术!

为了更好地展示 Appwrite 如何与 .NET 结合使用,我构建了一个包含所有基本 CRUD 功能的Todo API项目。接下来,我们将学习如何构建这样的项目,并利用.NET 7Appwrite构建强大的服务器端应用程序。

史蒂夫·哈维很兴奋

设置您的 Appwrite 实例 ☁️

首先,我们需要设置一个 Appwrite 实例来构建这个项目。

如果您是第一次尝试Appwrite , Appwrite是一个开源的后端即服务 (BaaS)平台,它提供预构建的 API,涵盖数据库、存储、身份验证、云函数等基础服务,满足您构建任何应用程序的需求。您可以选择使用 Docker 自行托管 Appwrite,也可以注册我们的托管服务Appwrite Cloud

步骤 1:创建 Appwrite 项目

启动和运行 Appwrite 项目的最简单快捷的方法是注册 Appwrite Cloud(如果您已有帐户,则可以登录)。

注册 Appwrite Cloud

之后,您就可以点击按钮创建您的第一个项目了Create Project

创建一个新的 Appwrite 项目

步骤 2:创建 API 密钥

创建 Appwrite 项目后,您必须创建API 密钥。您可以通过单击“与您的服务器集成”API Key部分中显示的按钮来完成此操作

创建 API 密钥

创建 API 密钥时,请务必选择documents.read相应的documents.write范围。

步骤 3:创建数据库

创建 API 密钥后,您需要设置一个数据库供 API 通信。转到Databases左侧选项卡,创建一个数据库,然后创建一个集合。在此集合中,我们需要创建以下属性:

属性 ID 类型 尺寸 默认值 必需的 大批
描述 细绳 255 是的
已完成 布尔值 是的

数据库属性

这些属性descriptionisCompleted包含我们为自己创建和使用的待办事项的详细信息。

完成所有这些步骤后,请获取您的项目 ID数据库 ID集合 IDAPI 密钥,因为我们在创建 .NET API 时需要这些信息。

创建一个 .NET 7 极简 API 🧑‍💻

现在我们的 Appwrite 项目已经配置完毕,可以开始构建 .NET Web API 了。

如果您的系统尚未安装.NET 7 SDK ,请务必安装。

步骤 1:创建一个最小 API 项目

要创建一个最小的 .NET API 项目,您必须打开终端并运行以下命令:



dotnet new web -o TodoApi


Enter fullscreen mode Exit fullscreen mode

这将./TodoApi使用 .NET CLI 提供的脚手架在目录中生成一个最小的 API 项目。

您可以进入该目录,并在您喜欢的代码编辑器中打开它。

步骤 2:安装 Appwrite SDK 并设置项目配置

项目创建完成后,我们来安装 Appwrite SDK:



dotnet add package Appwrite


Enter fullscreen mode Exit fullscreen mode

这将安装Appwrite 0.4.2 NuGet 包,其中包含当前最新版本的 SDK。

之后,您可以打开appsettings.json文件并添加以下内容(在 ` Loggingand`AllowedHosts字段之后):



  "Appwrite": {
    "Project_Id": "[PROJECT_ID]",
    "Database_Id": "[DATABASE_ID]",
    "Collection_Id": "[COLLECTION_ID]",
    "Api_Key": "[API_KEY]"
  }


Enter fullscreen mode Exit fullscreen mode

这里我们需要您之前从 Appwrite 项目中获取的项目 ID、数据库 ID、集合 ID 和 API 密钥。

步骤 3:创建待办事项模型

项目设置和配置完成后,首先我们来创建待办事项模型。Todo在项目中创建一个新类,如下所示:



public class Todo
{
    public string Description { get; set; }
    public bool IsCompleted { get; set; }
}


Enter fullscreen mode Exit fullscreen mode

该模型与我们在 Appwrite 数据库的集合中创建的属性相对应,并且在我们向数据库中添加或更新任何待办事项时尤为重要。

步骤 4:编写 Appwrite CRUD 函数

现在一切准备就绪,让我们来创建 API 端点和 CRUD 函数。请打开该Program.cs文件并将其替换为以下代码:



// Relevant using directives

using Appwrite;
using Appwrite.Services;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

// Get necessary Appwrite configuration from appsettings.json

var projectId = builder.Configuration["Appwrite:Project_Id"];
var apiKey = builder.Configuration["Appwrite:Api_Key"];
var databaseId = builder.Configuration["Appwrite:Database_Id"];
var collectionId = builder.Configuration["Appwrite:Collection_Id"];

// Initialize object for Appwrite Client

var client = new Client()
    .SetEndpoint("https://cloud.appwrite.io/v1")
    .SetProject(projectId)
    .SetKey(apiKey);

// Initialize object for Databases service APIs

var databases = new Databases(client);

// Create CRUD API endpoints

app.MapGet("/todos", async () =>
{
    try
    {
        var todos = await databases.ListDocuments(
            databaseId: databaseId,
            collectionId: collectionId);

        return Results.Ok(todos);
    }
    catch (AppwriteException e)
    {
        return Results.NotFound(new Dictionary<string, string> { { "message", e.Message } });
    }
})
.WithName("GetAllTodos");

app.MapGet("/todos/{id}", async (string id) =>
{
    try
    {
        var todo = await databases.GetDocument(
            databaseId: databaseId,
            collectionId: collectionId,
            documentId: id);

        return Results.Ok(todo);
    }
    catch(AppwriteException e)
    {
        return Results.NotFound(new Dictionary<string,string> { { "message", e.Message } });
    }
})
.WithName("GetTodo");

app.MapPost("/todos", async (Todo todo) =>
{
    try
    {
        var document = await databases.CreateDocument(
            databaseId: databaseId,
            collectionId: collectionId,
            documentId: ID.Unique(),
            data: todo);

        return Results.Created($"/todos/{document.Id}", document);
    }
    catch (AppwriteException e)
    {
        return Results.BadRequest(new Dictionary<string, string> { { "message", e.Message } });
    }
})
.WithName("CreateTodo");

app.MapPut("/todos/{id}", async (string id, Todo todo) =>
{
    try
    {
        var document = await databases.UpdateDocument(
            databaseId: databaseId,
            collectionId: collectionId,
            documentId: id,
            data: todo);

        return Results.NoContent();
    }
    catch (AppwriteException e)
    {
        return Results.BadRequest(new Dictionary<string, string> { { "message", e.Message } });
    }
})
.WithName("UpdateTodo");

app.MapDelete("/todos/{id}", async (string id) =>
{
    try
    {
        var document = await databases.DeleteDocument(
            databaseId: databaseId,
            collectionId: collectionId,
            documentId: id);

        return Results.Ok(document);
    }
    catch (AppwriteException e)
    {
        return Results.NotFound(new Dictionary<string, string> { { "message", e.Message } });
    }
})
.WithName("DeleteTodo");

app.Run();


Enter fullscreen mode Exit fullscreen mode

测试应用🌐

API 已准备就绪,我们可以开始测试了!请运行以下命令:



dotnet watch


Enter fullscreen mode Exit fullscreen mode

现在您可以使用cURLPostman或任何其他可以发送 HTTP 请求的 API 测试工具在本地测试所有端点。

API 端点 描述 请求正文
得到/todos 获取所有待办事项
得到/todos/{id} 获取 ID 的待办事项
邮政/todos 添加待办事项 待办事项:
{ "description": "<Enter todo description>", "isCompleted": false }
/todos/{id} 更新待办事项 待办事项:
{ "description": "<Enter todo description>", "isCompleted": false }
删除/todos/{id} 删除待办事项

您还可以查看以下存储库,其中最小 API 带有Swagger UI,使 API 测试更加简单。

GitHub 标志 adityaoberai / .NET-Appwrite-Todo-API

使用 Appwrite 和 .NET 构建的待办事项 CRUD API

.NET + Appwrite Todo API

描述

使用 Appwrite Cloud 和 .NET 7 构建的待办事项 CRUD API

安装

Appwrite 设置

  • 注册Appwrite Cloud

    注册 Appwrite Cloud

  • 创建你的第一个项目

    创建项目

  • documents.read创建具有指定范围的API 密钥documents.write

    API密钥范围

  • 创建一个数据库,然后创建一个集合,并创建以下属性

    属性 ID 类型 尺寸 默认值 必需的 大批
    描述 细绳 255 是的
    已完成 布尔值 是的

    集合属性

  • 请妥善保存项目 ID、数据库 ID、集合 ID 和 API 密钥,以便进行项目设置。

项目设置

  • 如果尚未安装,请安装.NET 7 SDK。

  • 克隆存储库

    https://github.com/adityaoberai/.NET-Appwrite-Todo-API.git
    Enter fullscreen mode Exit fullscreen mode
  • 还原所有 NuGet 包

    dotnet restore
    Enter fullscreen mode Exit fullscreen mode
  • 进入项目目录

    cd AppwriteCrudApi/
    Enter fullscreen mode Exit fullscreen mode
  • 将您从 Appwrite 项目中保存的项目 ID、数据库 ID、集合 ID 和 API 密钥添加到appsettings.json文件中。

  • 运行项目

    dotnet run
    Enter fullscreen mode Exit fullscreen mode
  • 在浏览器中打开以下网址

    https://localhost:7248/swagger
    

    或者

    http://localhost:5023/swagger
    





继续前进🛣️

非常感谢大家阅读并尝试这篇教程!如果您喜欢,请考虑将这篇博客分享给您的朋友和社交媒体。

如果您想了解更多关于 Appwrite 的信息,请查看官方文档并加入我们的Discord 服务器

注意安全,祝您搭建愉快 :)

文章来源:https://dev.to/appwrite/build-a-todo-api-with-net-and-appwrite-218d