我希望向网络公开一些服务。将会有带有基于 jQuery 的 JavaScript 代码的静态网页来访问这些服务,并且还会有各种应用程序可以访问这些服务。(或者没有人会关心;这也很有可能:-)
每个服务都可以很好地定义为一组方法,这些方法作用于一定数量的输入参数,并返回一定数量的输出参数。大部分是 REST,除了“身份”的概念——这些服务需要一些登录,并且登录确实为您设置了允许使用哪些服务的方法以及哪些特定实体的权限您可以使用这些方法解决问题。
理想情况下,我想使用 JSONP 公开服务,以使服务易于以跨站点方式使用——那些静态 Web 应用程序不应该都必须从我的应用程序服务器的域中提供服务。
数据类型集相当基本——varchar(255 个字符)、text(8191 个字符)、id(32 个字符,C 样式标识符约束)、double、long(在 JavaScript 中很难做到)、bool、datetime、email (varchar 匹配一个正则)和 url(varchar 匹配一个正则表达式)可能就足够了很长一段时间。
如果可能的话,我希望使用可以在多线程内核上扩展的应用程序服务技术来实现这些服务——如今,24 线程是普通中档服务器的标准配置。坚持使用 Python 或 Node.js 会让我感到不安,因为它们缺乏线程支持。另外,我希望类型是静态的,因为我相信静态类型可以防止某些类型的错误,这也与 Python、Node.js、PHP 和 Ruby 相关。
我也想在 Linux 上服务。这是一个非常艰巨的要求:-)
在静态语言世界中,实际上只有少数服务器框架或框架方法。Mono 有 HttpListener。有 Java 的 Jetty。还有几个。还有一些更深层次的框架,它们的开销比我想要的要多——J2EE、ASP.NET 等(在动态世界中,你有 Cake.PHP、Rails、Django 等)
因此,在最好的情况下,我希望 GET URL /foo/bar?arg1=2&arg2=xyzzy 映射到我编写的 foo 类型的对象,方法 bar,采用 int 和字符串类型的参数 arg1 和 arg2 (说)。我希望位于 HTTP GET 和对象方法之间的服务器胶水做两件事:1)权限控制(每个方法可以有一个或多个必需的权限)2)类型检查(每个参数都应该根据预期进行验证并强制原生类型的 URL 字符串格式)一旦方法返回一个或多个值(键/值对),胶水应确保返回值也符合规范,转换为正确的 JSON,并应注意返回如果在代码中引发异常,则会产生适当的错误结果。
我一直在寻找这种解决方案的高低,但我找到的所有解决方案都相去甚远。JSP 和 ASP 都是从 HTML 假设开始的——我通常生成 JSON,它不能很好地与语法集成(委婉地说)。JSPX,以及许多其他技术(HttpListener、CGI、Python Twisted,...)都停留在“do_GET”级别——没有分派到对象,没有权限控制,没有类型检查。然而,所有更高级别的框架都在此基础上添加了更多内容,并且经常添加我不需要的复杂路由——而且通常情况下,仍然不进行权限检查,而是将其保留为某些东西您必须在每个功能实现中手动编写。
我认为我能找到的最接近我想要的是 Thrift。但是,它仍然不进行权限检查,并且它所支持的“PHP 服务器”似乎是一个在端口 80 上侦听而不是与 Apache 集成的愚蠢 PHP cli 进程,并且它没有设置为支持 JSONP。
我错过了什么吗?是否有一些(最好是静态类型和多线程支持的)服务器技术可以进行类型检查和权限检查以及简单的对象方法分派,而没有大量其他杂物妨碍,并且可以从中调用(并响应到)JSONP?我应该延长 Thrift 吗?在每个方法上添加权限约束将是一个相当大的扩展,但至少我会得到 Thrift 所拥有的其他支持。(然后我必须添加 JSONP 支持,然后......)