我们计划构建一个Web应用程序,我希望有人能帮助我们决定是使用Azure App Service还是Azure Function为客户端提供rest API。我们的要求如下。
起初,我们打算使用Azure应用服务构建后端。但是在研究了Azure Functions的利弊之后,Azure Functions对我们变得更有吸引力。
那么,html" target="_blank">构建一个依赖Azure函数作为REST API提供者的web应用程序是一个好主意吗?
是否有人具有作为REST API提供程序构建、管理和扩展Azure Functions的经验?
构建一个依赖Azure函数作为REST API提供者的web应用程序是个好主意吗?
看起来你计划使用网络服务或Azure Function来使用REST API。我认为你的决定是完美的。对于Azure Function来说,并不是必须要有网络服务。Azure函数对你来说是最好的选择。你可以实现Web API提供的所有功能。所以如果你的目标只是开发API,那么你可以从Azure Function开始,没有其他选择。实际上它很出色!
是否有人具有作为REST API提供程序构建、管理和扩展Azure Functions的经验?
我正在与Azure Function合作,以实现AI Base Bot与LUIS的集成。根据我的理解,这是一个非常容易维护、响应时间最快的工具,您可以从任何地方构建它。因此,你无疑可以使用Azure函数。
为什么选择Azure功能:
使用Azure Function做很多事情:
您可以使用Azure功能开发强大的API服务。它有许多出色的功能。请查看此处
授权和认证:
只需在函数应用上集成授权和身份验证即可。甚至可以在每个功能上单独实现它,也可以在完整的应用程序上实现它。它支持大多数流行的身份验证提供程序,例如:
了解如何实现身份验证:
步骤:1
第二步
Rest函数代码示例:
在这里,我给你一个简单的代码片段开始:虽然它在Azure表存储上,但可以帮助你开发Azure函数和CRUD概念。
您的示例类:
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;
}
}
要记住的一点:
Azure 门户
执行的情况下,只需摆脱函数读取从表存储
类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;
邮递员请求模式:
函数调用示例:
{
"PartitionKey": "Your Param According to Table Storage Design" ,
"RowKey": "Your Param According to Table Storage Design",
"Directory": "Your Param According to Table Storage Design"
}
请参阅屏幕截图:
邮递员回应:
响应以我自己的表格设计为准
[
{
"partitionKey": "Microsoft SharePoint Server",
"rowKey": "2016"
}
]
请参阅下面的屏幕截图:
注意:对于宇宙数据库集成,您可以在此处查看。带函数的 Azure SQL 可在此处查看。
主要内容:计算机系统的结构,操作系统做什么?在计算机系统(包括硬件和软件)中,硬件只能理解机器代码(以和的形式代码),这对于一般的用户来说没有任何意义。 我们需要一个可以充当中介的系统,并管理系统中存在的所有进程和资源。 操作系统可以被定义为用户和硬件之间的接口。 它负责执行所有进程,资源分配,CPU管理,文件管理和许多其他任务。 操作系统的目的是提供一种用户可以方便有效地执行程序的环境。 计算机系统的结构 计算机系统包括: 用户(使用电脑
概览 首先我们了解一下 YODAOS 的运行时:YODAOS 基于 ShadowNode 它采用事件驱动、非阻塞I/O模型;在设计之初,ShadowNode 的接口与 Node.js 兼容,因此在大部分场景下,开发者可以像 Node.js 一样使用 ShadowNode,了解这些有利于开发者更快速的进行 YODAOS 上的应用开发。 YODAOS 开发应用时,需要关注应用的性能与稳定性,包括但不限
我试图添加一个自定义attributes对象类,因为我的一个应用程序只使用SamAccountName。 我发现,它需要以下模式来将其添加到LDAP中。
问题内容: 我已经读过Clojure vs. Scala的各种论述,而我意识到两者都有自己的位置。关于将Clojure和Scala进行比较时,有一些注意事项尚未得到完整的解释: 1.)两种语言中哪一种通常 更快 ?我意识到这从一种语言功能到另一种语言功能都会有所不同,但是对性能进行总体评估会有所帮助。例如:我知道Python字典的速度非常快。但作为一个整体,它是一个 多 比Java慢语。我不想和C
我必须为每个客户端每秒存储大约250个数值,即每小时大约90万个数字。它可能不会是全天的记录(可能每天5-10个小时),但我会根据客户端ID和读取日期对数据进行分区。最大行长约为22-23M,这仍然是可管理的。无论如何,我的方案看起来像这样: 密钥空间的复制因子为2,仅用于测试,告密者为和。我知道复制因子3更符合生产标准。 接下来,我在公司服务器上创建了一个小型集群,三台裸机虚拟化机器,具有2个C
你好,拉姆