Apache Thrift是否验证参数?

| 我正在考虑将Apache Thrift用于实现Web服务的PHP服务器。 如果将我的Web服务定义为接受两个参数-用户名作为字符串,密码作为整数-可能会过时地验证那些类型的参数是由客户端提供的,还是我仍然需要对服务器? 我这里不是为了清理输入的目的,而是为了将有意义的错误响应返回给客户端,以及是否以错误的参数调用服务,甚至会向服务器发出请求。     
已邀请:
        据我了解,检查-如果有的话-在“库级别”执行,将本地类型转换为Thrift类型,并在此生成代码。换句话说,它取决于您所使用的特定语言(PHP,Erlang等)的绑定,如果不遵守类型,则会引发有意义的(或不引起错误)错误。但是,我必须进一步研究它。     
        它基本上取决于我们在谈论哪种验证。 如果需要设置参数,则可以将其设置为“必需”。在这种情况下,在反序列化期间,大多数语言实现中都会检查这些字段(并非全部),并且每当缺少必需的参数时都将引发错误。但是,必填项以版本控制的潜在问题为代价:一旦发布了API,您就不能省略必填字段,否则将破坏兼容性。 通常可以通过_isset标志来检查正常值(“可选”)的存在,该标志正是出于此目的而存在的。这是您自己的代码负责的事情-Thrift确实提供了消息传递机制,但是当然不提供对数据的解释。 如果根据您的情况进行验证,则应检查数据格式(字符串和数字):由于Client和Server的代码都是从Thrift IDL文件生成的,因此该实现将根据正确的字段使用正确的字段序列化和反序列化方法IDL文件:
Service sample
{
  bool Login( 1: string Name, 2: i32 pwd)
}
如果出于任何原因需要将密码从i32更改为字符串,从技术上讲,这将导致两个更改: 删除ID为2的“密码”字段,除非该字段为“必填” 添加具有新ID 3的新字段 所以看起来是这样的:
Service sample
{
  bool Login( 1: string Name, /*2: i32 _deprecated_pwd*/, 3: string pwd)
}
由于字段类型和字段用途已绑定到数字字段ID,因此强烈建议在这种情况下使用另一个字段ID,该字段ID迄今为止在此范围内未使用。还建议保留IDL中的旧字段以指示过时的ID。 可以在Diwaker Gupta的“缺少指南”中找到有关此“软件版本控制”内容以及“必需”字段的优缺点的良好参考。     

要回复问题请先登录注册