[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Global Namespaces



I was thinking yesterday, that it would be nice to have an entire XML based interface. If most of the system was a backend which handled XML documents, the frontend could be a web app, a thick client, or any other sort of thing--the backend would have no reason to care.

All a new module would have to do, is process the portion of XML data passed to it by ID, and the frontend would consist of the UI section relating to that module, and a formatter to post the proper XML.

I realize that could get tricky with thick clients, but probably on the read side more than the write side.

Just musing.

Luke

On Sat, 13 Mar 2010, John Locke wrote:

Just reading back through the architecture threads, and I think it all
mostly sounds great, I like the direction you're going.

One thing comes to mind: I don't see a way of detecting in the Request
struct the difference between a query argument in the URL vs the body,
e.g. GET vs. POST parameters.

Are these going to get munged together? I do sometimes find it useful to
distinguish between the two, especially if the body contains something
other than a query string format (e.g. JSON, XML). As I'm doing more and
more resource-based web services, it seems like the Request struct may
need some more detail:

struct LedgerSMB::Web::Request, {
    params         => '*%', # formerly top-level hash
    method         => '$',  # GET/PUT/POST
    headers        => '*%', # Defined for the interface
    url            => '$',  # full url requested
    script_nsp     => '$',  # namespace of the script to run
    dispatch_point => '$',  # formerly 'action' on the top-level
};

I'm thinking that for easy integration, it would be nice to be able to
create a handler plug-in to translate some generic POST data into a
standardized document/struct of some kind that the rest of LSMB can
recognize. Not sure this needs to be a global, but it's something I
could see needing to do.

Basically, I'd want to be able to parse the GET arguments, and translate
the payload from a JSON- or XML- formated document into params that
regular LSMB modules can handle. I'd want access to the raw payload, and
to know how to populate the Request struct appropriately. So perhaps add:

get_params => '*%',
raw_post => '$',   # only populated on POST/PUT

... and specify that 'params' by default contains the get_params merged
with a parsed query-string from the raw post (with POST variables
overriding GET variables on collision). raw_post might be a query
string, an XML document, a JSON document, binary data, or whatever other
format a plug-in handler can interpret.

Then my handlers can modify the params after parsing the raw_post,
translate it into something that the rest of LSMB can process.


Is this kind of feedback useful?

Cheers,
John




-------- Original Message  --------
Subject: [Ledger-smb-devel] Global Namespaces
From: Chris Travers <..hidden..>
To: Development discussion for LedgerSMB
<..hidden..>
Date: Sat 13 Mar 2010 11:00:01 AM PST
I am thinking of suggesting two global namespaces

In package LedgerSMB

use Class::Struct LedgerSMB::Globals => {
               user => 'LedgerSMB::User',
               session => 'LedgerSMB::Session',
               config => 'LedgerSMB::ConfigFile',
                        # Config settings, similar to Sysconfig today
};

our Globals = LedgerSMB::Globals->new();

in pacakge LedgerSMB::Web:
use Class::Struct LedgerSMB::Web::Globals => {
               session => 'LedgerSMB::Session::Web',
               request => 'LedgerSMB::Web::Request',
};

our Globals = LedgerSMB::Web::Globals->new();

Any other globally accessible information that needs to be available
globally through apps/scripts?

Best Wishes,
Chris Travers

------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Ledger-smb-devel mailing list
..hidden..
https://lists.sourceforge.net/lists/listinfo/ledger-smb-devel




------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Ledger-smb-devel mailing list
..hidden..
https://lists.sourceforge.net/lists/listinfo/ledger-smb-devel