FLOWS
From Flows
Contents |
What is Flows?
Flows is a mechanism for taking networks that were not initially designed together and integrating them into a single communicative complex system.
Flows could be thought of as an API for APIs, or as a meta-API which enables everything to be interoperable, without the extra overhead of coordination costs. Flows makes it possible for the development of interoperability in parallel workgroups, which greatly increases flexibility, diversity, and rapidity of development.
A diagram of Flows is on http://prezi.com @ http://prezi.com/nra5d2vmful6/
Concepts
Flows uses the language and concept of a river as a metaphor and ontology for information processing.
Sources -> Tributaries -> Reservoirs -> Flows -> Delta -> Mouths
Sources of information are available as tributaries which can be stored in reservoirs and then hybridized into "mashups" to define flows which is then sent out via a delta into mouths.
Architecture
Basic Architecture
The Flows architecture deploys the crucial concepts of "plurality" and "diversity":
- Plurality - Components should be as small as conceivably possible and there should be a lot of them. If your component does two things, then it should be rewritten into two components.
- There are many ways to implement something. Flows allows this manifold development.
- Components are connected in a many-to-many fashion "horizontally".
- Components are context-aware and can communicate information about themselves and their environment.
- Diversity - Flows does not care about the internals of your component, only its communication with other components. Consequently,
- Flows components can be coded in any language.
- Flows components can be served by any http:// server.
- Flows components do not distinguish between local components and remote components.(eg "localhost" and remote server)
- This is true if component addressing is via http:// (ex. localhost or IP/DNS remote host).
- This is true if component addressing is via filesystem path (ex. local filesystem or mounted pseudo-local filesystem via nfs, FUSE, etc.).
Design
The simplest possible flows component implements the following.
- listens for requests (extensible for future development)
- REST (default)
- AMF
- etc.
- returns responses (extensible for future development)
- XML (default)
- HTML
- JSON
- TXT
- JPG, PNG, etc.
- a "sip" method that returns at least the following:
- basic response metadata including the flows version to which the response form corresponds:
- "URI" is a reference for this object (e.g. a URL)
- what request types the component will respond to
- what response types the component can return
- usage information
- what parameters (incoming variables) the component will accept
- what the default response is (usually is the same as "sip")
- what the default response type is (suggested: XML)
- Description human-readable text with usage explanation
- basic response metadata including the flows version to which the response form corresponds:
XML:
<response flows_version=".1">
<URI>http://blahblahblah</URI>
<request_types>
<request_type>HTTP GET</request_type>
</request_types>
<response_types>
<response_type>XML</response_type>
<response_type>HTML</response_type>
</response_types>
<usage>
<parameters>
<param>response_type</param>
</parameters>
<default_response>sip</default_response>
<default_response_type>XML</default_response_type>
<description>
This Flows component will echo back any text sent to it on the HTTP GET querystring,
using the response_type specified by the requestor.
</description>
</usage>
</response>
JSON:
{
response:{
flows_version:0.1,
URI:'http://blahblahblah',
request_types:{
request_type:'HTTP GET'
},
response_types:{
response_type:[
'XML',
'HTML'
]
},
usage:{
parameters:{
param:'response_type'
},
default_response:'sip',
default_response_type:'XML',
description:'This Flows component will echo back any text sent to it on the HTTP GET querystring,
using the response_type specified by the requestor.\n '
}
}
}
.
RFC Draft
- FlowsRFCDraft :: proposed RFC for Flows interoperability
NECESSARY information for RFCs and Development
- "Key words for use in RFCs to Indicate Requirement Levels" http://tools.ietf.org/html/rfc2119
- "Available Authoring Tools" http://tools.ietf.org//inventory/author-tools
- "Terminology of CNAME vs 'canonical name'" http://en.wikipedia.org/wiki/Canonical_name#Terminology_of_CNAME_vs_.22canonical_name.22 (Quoting from RFC 2181 section 10.1.1 @ http://tools.ietf.org/html/rfc2181)
Code
Flows Mercurial Work-Process
Development
Flows Watercoolers
Flows IRC
Flows Wiki (http://flows.panarchy.com)
Purposes:
- Flows concepts and explanations
- Flows architecture documentation, design, whitepapers, RFCs, etc.
- Flows demo application (FlowShed?) and components development
Flows Timeline
- 06/05/2009 setup Flows wiki
- 06/09/2009 setup flows-dev on code.google.com
- 06/09/2009 started coding with mercurial revision control
- 06/16/2009 Rick and Paul solidify Mercurial work-process
- 06/19/2009 created Flows development "HowTo"
- 06/25/2009 successfully generated documentation
- 07/20/2009 tested XML output against FLOWS DTD
- 08/15/2009 began developing flows components for common webservices and applications
- 09/24/2009 Roger and Paul made significant progress on the architecture and RFC
.
<noscript> This page uses Javascript to show you a Timeline. Please enable Javascript in your browser to see the full page. Thank you. </noscript>
Participants
Resources
Similar Projects
- http://www.opensocial.org/ (http://code.google.com/apis/opensocial/)
- http://oauth.net/
- http://pipes.yahoo.com/pipes/
- http://openid.net
- http://www.jackbe.com/
- WSGI - http://en.wikipedia.org/wiki/Wsgi
