gpt4 book ai didi

Azure Function 作为 Web API 性能和定价

转载 作者:行者123 更新时间:2023-12-03 17:15:59 27 4
gpt4 key购买 nike

我们正在计划构建一个Web应用程序,我希望有人可以帮助我们决定是使用Azure App Service还是Azure Function来向客户端提供Rest API。我们的要求如下。

  1. 身份验证和授权
  2. Azure SQL 和 Cosmos DB 上的 CRUD
  3. 多区域
  4. 每月 100,000,000 次 API 调用

首先,我们打算使用 Azure 应用服务构建后端。但在研究了 Azure Functions 的优缺点后,Azure Functions 对我们变得更有吸引力。

那么构建一个依赖 Azure Functions 作为 REST API 提供程序的 Web 应用程序是不是一个好主意?

是否有人有作为 REST API 提供商构建、管理以及扩展和扩展 Azure Functions 的经验?

最佳答案

构建一个依赖 Azure Functions 作为 REST API 提供程序的 Web 应用程序是个好主意吗?

您似乎计划使用 Web 服务或 Azure Functions 来使用 REST API。我想说你的决定是完美的。对于 Azure Function 来说,并不强制要求拥有 Web 服务。 Azure function将是您的最佳选择。您可以实现Web API提供的所有功能。因此,如果您的目标只是开发 API,那么您可以从 Azure Function 开始,别无选择。实际上非常出色!

是否有人有作为 REST API 提供商构建、管理以及扩展和扩展 Azure Functions 的经验?

我正在使用 Azure Function 来构建具有 LUIS 集成的 AI Base Bot。据我了解,它非常易于维护,响应时间最快,您可以从任何地方构建它。所以你毫无疑问可以使用Azure功能。

为什么选择 Azure Function:

  1. 它是无状态的,不需要任何服务器来运行
  2. 完全 REST,可以从任何地区的任何地方进行调用
  3. 可以开发 Azure Portal 和本地 Visual Studio
  4. 性价比高,只需按用量付费。
  5. 多语言支持
  6. 简单的授权和身份验证功能
  7. 根据您的 consumption plan 调用电话没有限制

使用 Azure 函数做很多事情:

您可以使用 Azure 函数开发强大的 API 服务。它有许多突出的特点。请查看查看here

授权和身份验证:

您可以简单地将您的授权和认证集成到您的功能应用程序中。您甚至可以单独在每个功能上或在完整的应用程序上实现它。它支持大多数流行的身份验证提供程序,例如:

  1. Azure Active Directory
  2. 微软身份
  3. 护目镜
  4. Facebook
  5. Twitter 身份验证

看看如何实现身份验证:

步骤:1

enter image description here

步骤:2

enter image description here

Rest 函数代码示例:

这里我给你一个简单的代码片段:虽然它是在Azure表存储上,但可以帮助你开发azure函数和CRUD概念。

您的示例类(class):

  public class YourSampleClass
{

public string PartitionKey { get; set; }
public string RowKey { get; set; }

}

表存储类:

 public class TableStorageClass
{
public TableStorageClass()
{

}
public TableStorageClass(DynamicTableEntity entity)
{
PartitionKey = entity.PartitionKey;
RowKey = entity.RowKey;

}

public string PartitionKey { get; set; }
public string RowKey { get; set; }


}

Azure Function V2 示例:

public static class FunctionReadFromTableStorage
{
[FunctionName("FunctionReadFromTableStorage")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");

//Read Request Body
var content = await new StreamReader(req.Body).ReadToEndAsync();

//Extract Request Body and Parse To Class
YourSampleClass objYourSampleClass = JsonConvert.DeserializeObject<YourSampleClass>(content);

// Validate param because PartitionKey and RowKey is required to read from Table storage In this case , so I am checking here.
dynamic validationMessage;

if (string.IsNullOrEmpty(objYourSampleClass.PartitionKey))
{
validationMessage = new OkObjectResult("PartitionKey is required!");
return (IActionResult)validationMessage;
}
if (string.IsNullOrEmpty(objYourSampleClass.RowKey))
{
validationMessage = new OkObjectResult("RowKey is required!");
return (IActionResult)validationMessage;
}


// Table Storage operation with credentials
var client = new CloudTableClient(new Uri("https://YourStorageURL.table.core.windows.net/"),
new Microsoft.WindowsAzure.Storage.Auth.StorageCredentials("YourStorageName", "xtaguZokAWbfYG4QDkBjT+YourStorageKey+T/kId/Ng+cl3TfYHtg=="));
var table = client.GetTableReference("YourTableName");

//Query filter
var query = new TableQuery()
{
FilterString = string.Format("PartitionKey eq '{0}' and RowKey eq '{1}'", objYourSampleClass.PartitionKey, objYourSampleClass.RowKey)
};


//Request for storage query with query filter
var continuationToken = new TableContinuationToken();
var storageTableQueryResults = new List<TableStorageClass>();
foreach (var entity in table.ExecuteQuerySegmentedAsync(query, continuationToken).GetAwaiter().GetResult().Results)
{
var request = new TableStorageClass(entity);
storageTableQueryResults.Add(request);
}

//As we have to return IAction Type So converting to IAction Class Using OkObjectResult We Even Can Use OkResult
var result = new OkObjectResult(storageTableQueryResults);
return (IActionResult)result;
}
}

要记住的一点:

  1. 如果Azure Portal执行,只需删除FunctionReadFromTableStorage
  2. 您需要以下引用来执行上述代码
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Microsoft.WindowsAzure.Storage.Table;
using System.Collections.Generic;

postman 请求模式:

函数调用示例:

{
"PartitionKey": "Your Param According to Table Storage Design" ,
"RowKey": "Your Param According to Table Storage Design",
"Directory": "Your Param According to Table Storage Design"
}

查看屏幕截图:

enter image description here

postman 回复:

响应取决于我自己的表格设计

[
{
"partitionKey": "Microsoft SharePoint Server",
"rowKey": "2016"
}
]

请参阅下面的屏幕截图:

enter image description here

注意: 对于 CosmosDb Integration你可以检查hereAzure SQL with Function看看here .

关于Azure Function 作为 Web API 性能和定价,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56497251/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com