Hi Dave,
On Apr 2, 2009, at 10:55 PM, Dave Engberg wrote:
Hey, Brian -
I'm basically in charge of our API stuff (wrote the IDL, docs,
service implementation, etc.), and would be happy to chime in on any
questions you have.
Neat. I figured you guys were on this list.
Brian Hammond wrote:
I'm assuming EverNote is running the PHP generated "server" since
their staging/testing web service box is running Apache.
Our service implementation is Java on Tomcat, but some of our static
web pages run out of a PHP server for historic reasons. All of the
Thrift goes through a single Java Servlet. Originally, this servlet
was pretty small, and we could have given out the source, but now
it's all munged up with code for logging, throttling, etc.
Oh, Java. OK.
The HTTP service basically needs to take the binary contents of the
HTTP POST and then hand them over to the server skeleton for
processing, and then marshal the results back into the binary
reply. To correctly implement HTTP for portability, you need to
buffer the reply so you can give back a Content-Length header.
The basic implementation is really simple if you're running on a
decent HTTP server, but you will need to add a decent amount of
exception handling to deal with all of the mess you get from
Internet connectivity if you're opening this up to the world.
OK. I get it. So I suppose if I were to open this up to the world
I'd want to use nginx with mod_wsgi - it's very efficient. Given
that, I suppose I'd need to create the equivalent of TPhpStream,
similar to what you did in your Java servlet.
I suppose I need to dig into the WSGI spec a bit deeper then but
perhaps it's as simple as using the TBufferedTransport on the
environ['wsgi.input'] ... Not sure yet if this is correct or not but
this is encouraging: http://wsgi.org/wsgi/Specifications/handling_post_forms
Currently environ['wsgi.input'] points to a stream that represents
the body of the HTTP request.
...
1) use SSL to encrypt user credentials
By using HTTP, we basically got HTTPS for free ... we offload it to
our Citrix load balancers, in fact, so our app servers just handle
HTTP.
Yeah, that's my thought exactly -- use HTTP and deploy to a solid
httpd like nginx and you get all the heavy lifting for free, including
epoll/poll/etc and HTTPS support.
OK, this is good.
Thanks!
Brian