httpd module vs inets {packet,http}

ke han <>
Thu Mar 9 07:01:49 CET 2006


Fair enough.  Either way, your talking about needing a web server  
that handles http requests with agility and has all the bells and  
whisltes for production.
You don't need to roll your own server in this case.
As other have said, if your starting a new project use Yaws.  If you  
have to use legacy code relying on inets, then its not a bad code  
base either.
good luck, ke han


On Mar 9, 2006, at 5:13 AM, Ryan Rawson wrote:

> Thanks for the advice guys.
>
> My understanding of REST is basically a rejection of SOAP -
> essentially instead of saying "use POST and send this XML request
> document and get a reply", instead, embed the request in the URI/URL.
> Use what we already know works - GET for read-requests and POST for
> write-requests.
>
> -ryan
>
> On 3/8/06, Jon Hancock <> wrote:
>> My understanding is that REST is all about returning XML documents.
>> So a gross overview of the REST transaction life-cycle is:
>>         1 - fetch incoming requests (I think REST requests come  
>> wrapped in
>> an HTTP format?)
>>         2 - decode the request's URI and parameters
>>         3 -  statically or dynamically construct the resource to  
>> return
>>         4 - return the resource as an XML doc
>>
>> Yaws will be a champ at this sort of thing.
>> The HowTo you reference is enlightening and well written.  The HowTo
>> shows how to write your own socket server.    You would only want to
>> do this for something very specialized.  For example, if you wanted
>> to build a new server to handle some custom protocol you've written
>> you would start with this HowTo structure and build from there.  I am
>> building an app that has just this requirement and I found the HowTo
>> to be a solid starting point.
>> But for your needs, go with Yaws.
>>
>> On Mar 8, 2006, at 6:24 PM, Ryan Rawson wrote:
>>
>>> Would you mind elaborating a bit for me?
>>>
>>> Basically my application is going to automatically discover its  
>>> fellow
>>> node hosts via LDAP (we have a mechanism already), use mnesia to
>>> maintain state across them, and each machine is going to answer HTTP
>>> service queries.  That is my current design - one major advantage is
>>> mnesia is a great cross-node database, great for high read/low write
>>> services that need to be able to answer questions quickly but  
>>> don't do
>>> nearly as many writes.  This particular feature of my app made me
>>> think Erlang would be well suited.
>>>
>>> -ryan
>>>
>>>
>>> On 3/8/06, Sean Hinde <> wrote:
>>>> That is interesting feedback on the tutorial, thanks.
>>>>
>>>> If I can find time to wrestle again with the sometimes flaky update
>>>> mechanism on the Trapexit HOWTO pages I will update the tutorial to
>>>> point out more clearly where the API to user code appears, as  
>>>> well as
>>>> checkin a couple of bugfixes from folks who have studied it deeply
>>>> and posted on the list.
>>>>
>>>> FWIW I would recommend Yaws most highly for new applications. It is
>>>> not nearly as heavyweight as it first appears, and is very nice for
>>>> writing this sort of application.
>>>>
>>>> Sean
>>>>
>>>> On 8 Mar 2006, at 08:11, Ryan Rawson wrote:
>>>>
>>>>> I didn't like the howto - it seemed like my code would be littered
>>>>> with http protocol droppings, even though the actual framing is
>>>>> taken
>>>>> care of by the http packet mode.
>>>>>
>>>>> I think for me, yaws seems like this whole big thing, and kind of
>>>>> bothers me - enough to look at alternatives first.
>>>>>
>>>>> Thanks for the mod_esi pointer.
>>>>>
>>>>> -ryan
>>>>>
>>>>> On 3/8/06, Matthias Lang <> wrote:
>>>>>>
>>>>>> A "REST" web service seems to be some sort philosophy for how to
>>>>>> design a service. For the purpose of "how do I do this in
>>>>>> Erlang", I
>>>>>> think it just boils down to "how do I serve dynamically
>>>>>> generated web
>>>>>> pages". If it's not, then my answer probably misses the point.
>>>>>>
>>>>>> So: if you just want to serve dynamic web pages, you can choose
>>>>>> between two ready-made web servers: OTP's httpd and YAWS. Both  
>>>>>> web
>>>>>> servers are used in the real world. They have different  
>>>>>> peformance
>>>>>> tradeoffs and different approaches to interfacing with 'your'
>>>>>> application. YAWS seems to be more popular for new  
>>>>>> applications. If
>>>>>> you can't make up your mind about which one to use, flip a coin.
>>>>>>
>>>>>> The OTP httpd interface you probably want to use is 'mod_esi':
>>>>>>
>>>>>>   http://www.erlang.org/doc/doc-5.4.12/lib/inets-4.6.2/doc/html/
>>>>>> mod_esi.html
>>>>>>
>>>>>> Writing code to use it is straightforward, the hard part is  
>>>>>> all the
>>>>>> fudging around with httpd.conf.
>>>>>>
>>>>>> If, on the other hand, you want to write your own web server  
>>>>>> 'from
>>>>>> scratch', then the undocumented http mode of the packet driver is
>>>>>> useful. That's what the 'howto' you found is about.
>>>>>>
>>>>>> Matthias
>>>>>>
>>>>>> --------------------
>>>>>>
>>>>>> Ryan Rawson writes:
>>>>>>> Hi all,
>>>>>>>
>>>>>>> I read the 'fast httpd' howto from trapexit.org, and I also
>>>>>>> looked at
>>>>>>> the httpd module in OTS.  I'm a little confused - it seems to me
>>>>>>> that
>>>>>>> the httpd howto doesn't use the httpd module, it uses a
>>>>>>> undocumented
>>>>>>> feature of the packet driver (which may in turn internally  
>>>>>>> use the
>>>>>>> httpd module).  While the httpd documentation seems to describe
>>>>>>> callbacks but its kind of thinly documented.  Not the end of the
>>>>>>> world, but I'm confused - what is the recommended thing to do
>>>>>>> here?
>>>>>>> What do other people do?  Say for example, creating a REST "web
>>>>>>> service" ?
>>>>>>>
>>>>>>> Thanks in advance for any tips and hints.
>>>>>>> -ryan
>>>>>>
>>>>
>>>>
>>
>>




More information about the erlang-questions mailing list