我计划使用.NET之外的ServiceStack提供的REST服务.我打算为Java和obj-c编写客户端.这应该很容易,因为它是REST服务,但是在文档中似乎暗示了其他方面:
But ServiceStack includes two clients which are optimized for ServiceStack in aspects like exception handling etc.
我将如何使用Android实施ServiceStack客户端?只需遵循正常的REST消耗程序?我应该担心任何异常处理问题吗?
另外,身份验证是否会成为问题(我将使用BasicAuthentication)?
解决方法:
ServiceStack Web服务提供了纯HTTP / REST API,这些API实际上只是在线上的序列化POCO DTO.您可以控制整个HTTP输出,因为ServiceStack不会在序列化的有效负载周围添加任何其他杂项.
期待纯序列化DTO
自以为是的性质来自于ServiceClients,它们假定服务只是返回纯序列化的DTO(即没有附加的残差),它只是将原样反序列化为指定的响应类型. ServiceClient的独特之处在于,它们可以为您提供强大的端到端API,而无需任何代码生成,因为您可以重复使用定义Web服务所用的POCO DTO.
退回到预定义的路线
默认情况下,像Send<TResponse>(dto)这样的API中不包含relativeOrAbsoluteUri的API将默认使用ServiceStack自动提供的pre-defined routes,允许您调用Web服务而无需为其指定任何自定义路由.当然,您可以选择使用自定义路由,而不必遵循IRestClient和IRestClientAsync API,这些API允许您指定要使用的URL.
自动错误处理
C#ServiceStack ServiceClient经过优化,按照惯例,ServiceStack Web服务将在您的Response DTO的ResponseStatus属性中序列化结构化错误响应(仅当它具有一个时).客户端所做的所有服务只是将错误响应反序列化为类型化的C#WebServiceException,这使您的C#客户端可以对结构化错误进行强类型访问,如Validation wikipage中所述.
基本上,ResponseStatus属性只是一个约定(不是一些抗REST的魔术),您仍然可以控制返回的HttpStatus代码和描述.这只是所有REST客户端都可以平等访问的另一个纯DTO属性-这是一个simple JavaScript ss-validation.js例程,该例程提取responseStatus元数据并将错误注入到Twitter Bootstrap HTML表单中.