在web API上公开SQL Server存储过程

本文关键字:SQL Server 存储过程 web API | 更新日期: 2023-09-27 18:27:42

我不确定这是否是堆栈溢出问题,但这里是。。。

假设您有两个站点:

  • 站点A承载一个可公开访问的web API,该API在同一站点使用NoSQL数据库和一组web应用程序
  • 站点B承载SQL Server(与站点a的NoSQL数据库不同的数据)和一些其他web应用程序

问题是站点A上的web API需要访问站点B上的SQL Server以获取其某些功能。您可以公开SQL Server IP并以这种方式进行存储proc调用,但是否可以创建一个通用的web API,该API将托管在站点B上,并代理来自站点a的SQL调用?您不会想公开您的SQL Server IP,对吧?

如果您为要在web API上调用的每个存储过程创建一个方法是可能的,但是否不可能避免这种情况并使用通用代理?

如果我走错了方向,请告诉我。。。

在web API上公开SQL Server存储过程

您所描述的似乎是SQL server通过web api的隧道。我不会鼓励。

与其将这两个系统视为SQL Server数据库v/s NoSQL数据库,不如将它们抽象为域实体的服务。

如果这两个系统需要交换数据,它将以这些实体的形式存在。我有这种感觉的原因:

  1. 保持系统隔离,模式更改不必影响下游系统
  2. 允许灵活地封装一个系统的内部,以便设计消费者可以是合同驱动的

编辑:

我不赞成这样做,因为

  1. 这往往有一个复杂的设置,站点a现在谈论它不拥有或控制的原始数据。您可能很容易处于SQL服务器需要B所要求的更改的位置,这使得a非常脆弱(事情很容易破裂)
  2. 与A无关的业务更改/逻辑可以通过B所做的DDL等更改悄悄进入

我更希望a和B之间有一个非常松散的耦合。定义数据的所有权,其他消费者需要通过合同进行沟通。

我最终创建了一个ASP.NET MVC站点,该站点带有一个控制器,该控制器使用反射来根据传入的参数确定客户端尝试调用哪个存储库方法。因此,它基本上是一个用于远程调用SQL proc的API。当然,它有身份验证。它托管在站点B.

站点A承载一个调用API并获取数据的站点。

编辑:

WCF数据服务也会解决这个问题。