防止应用程序更改破坏API

防止应用程序更改破坏API,api,wcf-web-api,Api,Wcf Web Api,我有一个应用程序,我目前正在编写一个API。这是我第一次自始至终地创建API,并阅读了许多优秀的文章以及如何做到这一点。然而,这些材料中有很多是专门关注API开发的(这是应该的),但没有发现任何涉及如何确保API不会被应用程序项目中发生的更改破坏的内容 我的应用程序由一个ASP.NET MVC web应用程序组成,它调用服务层来执行CRUD类操作。因此,要获得我的应用程序中所有用户的列表,MVC应用程序会调用服务层并请求他们,并显示一组用户。我的API(WCFWebAPI)也在内部使用这个服务层

我有一个应用程序,我目前正在编写一个API。这是我第一次自始至终地创建API,并阅读了许多优秀的文章以及如何做到这一点。然而,这些材料中有很多是专门关注API开发的(这是应该的),但没有发现任何涉及如何确保API不会被应用程序项目中发生的更改破坏的内容

我的应用程序由一个ASP.NET MVC web应用程序组成,它调用服务层来执行CRUD类操作。因此,要获得我的应用程序中所有用户的列表,MVC应用程序会调用服务层并请求他们,并显示一组用户。我的API(WCFWebAPI)也在内部使用这个服务层,当我请求一个用户列表时,我再次得到一个用户集合(JSON、XML等)

但是,如果由于某种原因,另一个开发人员通过将字段(如姓氏)重命名为姓氏来更改基础用户域对象,那么这可能会破坏我的API,因为服务层将在需要其他内容时返回到具有新字段名的用户对象。事实上,我的API有自己的对象表示,这些对象在被请求时映射到应用程序对象,但此映射不会映射姓氏属性,并将返回为null

因此,应用程序中的所有更改是否都必须严格控制,因为我提供了API?如果是这样,那么您是否必须同时更改应用程序和API?如果遗漏了更改怎么办?上述内容对我来说似乎不正确,因此我的职位是寻求更多的知识


同样,我对这一点非常陌生,因此非常感谢您在这方面提供的任何帮助。

如果您可以在应用程序发展过程中创建新版本的API并支持旧版本,那么您的应用程序将不可避免地发展,然后通知旧的API何时会被禁用。

如果您可以在应用程序发展的过程中创建新版本的API并支持旧版本,那么您的应用程序将不可避免地发展,然后通知旧的API何时会被禁用。

如果您拥有API设计,并且您真的不希望任何人污染您的设计。介绍专用于API使用的DTO。可以从基础领域模型映射。但是您的演示文稿(通过xml或json)不会更改,即使基础模型经常更改。

如果您拥有API设计,并且您真的不希望任何人污染您的设计。介绍专用于API使用的DTO。可以从基础领域模型映射。但是您的演示文稿(通过xml或json)不会更改,即使基础模型经常更改。

谢谢您,所以您的意思是,每次应用程序更改时,都应该创建一个反映这些更改的新API版本。然后,为了支持旧API,我需要将新的姓氏属性映射到旧API用户的姓氏属性,这样它仍然可以工作。如果应用程序对象中的属性被删除而不是修改,会发生什么情况?当应用程序链接到API时,软件开发团队是否会对应用程序的代码更改施加规则?API反映了应用程序的功能,我想如果字段被设置为obselete,它们可以设置为空而不是删除,这样就不会破坏其他应用程序。谢谢Mark,因此,您所说的是,对于每个应用程序更改,都应该创建一个反映这些更改的新API版本。然后,为了支持旧API,我需要将新的姓氏属性映射到旧API用户的姓氏属性,这样它仍然可以工作。如果应用程序对象中的属性被删除而不是修改,会发生什么情况?当应用程序链接到API时,软件开发团队是否会对应用程序的代码更改施加规则?API反映了应用程序的功能,我想如果字段被设置为obselete,则可以将其设置为空而不是删除,所以你不要破坏其他应用程序。这正是我所做的,但我不想太详细,因为我的问题已经很长了。我有一个UserDto从我的服务层返回,它使用Automapper映射到我的UserApi对象。这为我提供了一些解耦,但是,如前所述,如果我的UserDto对象属性发生更改,我需要更新映射。然而,如果很多开发人员都在编写代码,这可能会被取消检查,因此为什么会出现这个问题。我从这两个答案中了解到的是,您必须检查应用程序更改不会破坏API。如果他们更新了映射或新版本的API,这正是我所做的,但我不想详细讨论,因为我的问题已经很长了。我有一个UserDto从我的服务层返回,它使用Automapper映射到我的UserApi对象。这为我提供了一些解耦,但是,如前所述,如果我的UserDto对象属性发生更改,我需要更新映射。然而,如果很多开发人员都在编写代码,这可能会被取消检查,因此为什么会出现这个问题。我从这两个答案中了解到的是,您必须检查应用程序更改不会破坏API。如果他们更新了映射或API的新版本。