出于好奇,我想知道首选顺序,基于技术水平和示例的新api.
在大多数情况下,所有基础设施问题都是相同的,即主机的设置......但是当谈到服务模型,服务接口和端点设置时,哪些是最新的和首选的?
谢谢你,斯蒂芬
我已经阅读了 基于消息的Web服务优势的文章,我想知道是否有推荐的样式/实践来对ServiceStack中的Restful资源进行版本控制?不同的版本可以在请求DTO中呈现不同的响应或具有不同的输入参数.
我倾向于URL类型版本控制(即/ v1/movies/{Id}),但我已经看到了在HTTP头中设置版本的其他实践(即Content-Type:application/vnd.company.myapp-v2 ).
我希望有一种方法可以使用元数据页面但不是一个需求,因为我注意到只需使用文件夹结构/命名空间在渲染路径时工作正常.
例如(这不会在元数据页面中呈现,但如果您知道直接路由/网址则执行正确)
码
namespace Samples.Movies.Operations.v1_1
{
[Route("/v1.1/Movies", "GET")]
public class Movies
{
...
}
}
namespace Samples.Movies.Operations.v1
{
[Route("/v1/Movies", "GET")]
public class Movies
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
和相应的服务......
public class MovieService: ServiceBase<Samples.Movies.Operations.v1.Movies>
{
protected override object Run(Samples.Movies.Operations.v1.Movies request)
{
...
}
}
public class MovieService: ServiceBase<Samples.Movies.Operations.v1_1.Movies>
{
protected override object Run(Samples.Movies.Operations.v1_1.Movies request)
{
...
}
}
Run Code Online (Sandbox Code Playgroud) 我参考ServiceStack文档注册使用POCO:
由于它促进了干净,可重复使用的代码,ServiceStack始终鼓励使用代码优先的POCO来处理所有事情.
即可以使用相同的POCO:
在请求和响应中DTO(在客户端和服务器上)
在JSON,JSV和CSV文本序列化器中
作为OrmLite,db4o和NHibernate中的数据模型
作为存储在Redis中的实体
作为存储在缓存和会话中的blob
在MQ的服务中删除并执行"
我喜欢servicestack以及使用它编写Web服务是多么容易.我试图了解如何最好地设置我的项目,而不是遇到任何问题.
具体来说,我正在与返回响应对象的架构理念作斗争,该对象也是一个数据模型(如SS所建议的).关注分离的想法在我内心过于根深蒂固.如果你对所有事情都使用相同的POCO,那么将不会遇到问题.例如,返回例如视图对象不是"更安全"吗?
我有一个服务堆栈服务,我们将调用Orders具有标准GET路由
/orders - 获取所有客户/orders/{Ids} - 获取特定客户这一切都很好,花花公子,但我想我会添加另一条路线
/orders/customers/{CustomerId} - 获取具有特定客户ID的订单这可以在浏览器中找到路由时找到,但是当我使用ServiceStack Client时,我得到了不明确的路由异常,并列出了三条路由.
我不太确定最好的解决方法是什么..我正在做的不是正确的REST方式吗?
我知道我可以简单地手动输入路线之JsonServiceClient类的
client.Get<List<Orders>>("/orders/customers/7")
这将有效,但我更愿意采用打字的方式...即
client.Get(new OrdersRequest { CustomerId = 7 });
这是我正在使用的RequestDTO示例
public class OrdersRequest : IReturn<List<Orders>>
{
public int[] Ids {get; set;}
public CustomerId {get; set;}
public OrdersRequest(params int[] ids)
{
this.Ids = ids;
}
}
Run Code Online (Sandbox Code Playgroud)
我是否必须为此使用不同的Dt或......?
任何有关此方法的示例的任何帮助或指针,或者更好的方式来创建服务将是值得赞赏的.
谢谢
我一直在评估ServiceStack,到目前为止,我已经出售了很多 - 但我有一个要求,我认为这将成为一个交易破坏者.
我基本上需要多个AppHost派生的实例.第一个很好地旋转,但其余的失败,因为"AppHostBase.Instance已经设置".
这是否意味着如果我想要多个主机(在不同的Uris上),在不同的可执行文件中?如果是这样,这是相当令人失望的,因为除了这个限制之外,这个库在其他方面都是完美的.
如果我错了,有人能指出我的解决方案吗?
请允许我详细说明一下.我们计划通过网络提供许多服务.我的目的是将它们设计为单独的服务,然后在托管类中"托管".托管类本身是用于管理目的的服务,并且具有启动和停止服务的能力.它们在整个网络中是"可被发现的".我们可以在不同时间或不同时间启动和降低不同机器上的服务.
我的计划是为每个事物使用服务堆栈,并且能够在任何机器和任何"主机"上以临时方式创建和销毁服务.我唯一磕磕绊绊的是AppHost只被初始化一次.
显然我做错了,所以关于如何在同一个可执行文件中托管多个服务的任何信息都会很棒:)
我有几个与使用ServiceStack的REST服务实现相关的问题.
对于GET操作,我将请求DTO定义如下:
[Route("/Customer/{ID}", Verbs = "GET")]
public class GetCustomer : IReturn<GetCustomerResponse>
{
....
....
}
Run Code Online (Sandbox Code Playgroud)这里"GetCustomer"是请求DTO,"GetCustomerResponse"是响应DTO.但是对于PUT/POST/DELETE操作,我只需要知道操作是否成功提交,如果'不'那么什么是异常.那么对于POST/PUT/DELETE我的请求dto定义应该是什么?它应该使用IReturnVoid,如下所示?
[Route("/Customer/{ID}", Verbs = "DELETE")]
public class DeleteCustomer : IReturnVoid
{
....
....
}
Run Code Online (Sandbox Code Playgroud)
如果我必须使用IReturnVoid,那么如何检索提交我的操作时可能发生的任何异常信息?
在服务堆栈的错误处理文档中,它是写的,我在下面引用
错误响应类型
抛出异常时返回的错误响应取决于是否存在常规命名的{RequestDto}响应DTO.
如果存在:
无论服务方法的响应类型如何,都会返回{RequestDto}响应.如果{RequestDto}响应DTO具有ResponseStatus属性,则会填充它,否则将不返回ResponseStatus.(如果您使用[DataContract]/[DataMember]属性修饰了{ResponseDto} Response类和属性,则还需要对ResponseStatus进行修饰以填充().
否则,如果不是:
返回一个通用的ErrorResponse,其中包含一个填充的ResponseStatus属性.
服务客户端透明地处理不同的错误响应类型,对于无模式格式(如JSON/JSV/etc),在自定义或通用ErrorResponse中返回ResponseStatus之间没有实际的明显区别 - 因为它们都在线路上输出相同的响应.
我从上面得到的是我的服务实现中的Delete方法的返回类型是什么?如何在不定义删除响应DTO的情况下实现我的删除方法但是我能够检索"ErrorResponse"n异常信息?
路线:
[Route("/DeleteCustomer/{ID}", Verbs = "DELETE")]
public class DeleteCustomer : IReturn<DeleteCustomerResponse>
{
public int ID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
方法实施:
public DeleteContactResponse Delete(DeleteContact request)
{
.....
}
Run Code Online (Sandbox Code Playgroud)
但每当我使用我的客户端调用此删除时,我总是得到"NotFound"异常.我尝试了不同的客户端但是我得到了404错误.
与Servicestack文档一起提供的参考链接之一可以重复使用"GET"和"DELETE"动词.
另一个链接表明并非所有浏览器都支持删除操
所以我想知道如何实现删除操作?
我想使用现有数据库(SQL Server)使用Servicestack启动新项目.我非常喜欢并且还学习了复杂的servicstack教程.我想请求一些帮助,因为我正面临一些挑战,因为我是新手,我正在寻找示例/ tutorial让我从POCO开始使用现有的表映射.一个表和一个服务请求的非常基本的例子足以让我开始.
谢谢
我刚刚开始研究ServiceStack和WOW,我不妨把WCF抛到窗外,但它也可以使用Redis发送消息.
我熟悉NServiceBus,它也用于发送消息和pub/subs.由于ServiceStack是一个Web服务,您可以为外部客户端打开它; 我不认为NServiceBus可以做到这一点.
除此之外,选择其中一种技术的优缺点是什么?有哪些技术可能是首选的.
我们开始使用servicestack v4,请放心,客户端没有许可限制.至少这是我从servicestack的下载页面中读出的内容.
我们正在根据mythz 在servicestack上回答这个问题来构建我们的项目如何构建api.
通用客户端按预期工作(到目前为止)而不设置许可证,但是当同事使用.Dump()方法创建针对服务的测试客户端时,他遇到了此异常:
已达到'20 ServiceStack.Text类型'的免费配额限制.请参阅https://servicestack.net升级到商业许可证或访问https://github.com/ServiceStackV3/ServiceStackV3以恢复到免费的ServiceStack v3.
让我们说:.Dump() - 方法不是问题,我们可以不用它:)但是,我真的不喜欢这些突然的例外!他们突然爆炸你的项目,达到某种许可限制.最后一次这样的事情发生了,它是在一个ormlite集成测试中.一切正常,然后KABOOM,你必须将你的许可证添加到你的NUnit测试项目.
这个框架中还有其他问题吗?我们是否可以向我们的API消费者推荐使用servicestack客户端进行连接,还是会突然回来困扰我们?我完全理解对框架进行许可的必要性,但这一切都归结为我不相信现在是我服务核心的框架!
什么可以自由使用客户端包及其依赖关系,什么不能?
你有任何和解的话吗?是否会删除ServiceStack.Client-mines,或者我们是否应该建议所有使用servicestack.client-package的客户购买许可证以避免他们的应用程序突然崩溃,如果我们在POCO类中添加另一个属性?如果ServiceStack.Client不是"免费",而是"免费"包,那么如果在某种配额下,我怎么知道调用方法呢?
我喜欢ASP.NET MVC控制器的功能,能够添加将URL的某个部分映射到方法参数的路由属性,即:
[Route("there/are/{howManyDucks}/swimming/in/the/{bodyOfWaterType}")]
public string NotifyDucksSwimming(int howManyDucks, string bodyOfWaterType)
{
...
}
Run Code Online (Sandbox Code Playgroud)
是否有一种与ServiceStack相同的方法,并为每种类型的请求跳过DTO类?
servicestack ×10
c# ×4
rest ×2
architecture ×1
asp.net ×1
msmq ×1
nservicebus ×1
redis ×1
routes ×1
web-services ×1