for instance, you could call it "retrieve" and it would still fit
ALPS is meant to describe data and actions of an interface, not the details of a transfer protocol.ALPS focuses on general network promises (safe/unsafe, idempotent/non-idempotent) and, as has been pointed out here, conflates this set of four possible cases into three (leaving safe-non-idemporent out of the list)So, ALPS does not contain direct information about any single protocol.Right now ALPS can be used to support HTTP.OPTIONS the same way it can be used to support HTTP.CONNECT or FTP.PWD. IOW, there are lots of protocol-specific commands that have no direct mapping to the various commands within any single protocol.ALPS was also designed to be mapped to media-types, not protocols. For this reason, there is nothing in the ALPS specs that allow us to indicate protocol details for an affordance.I'm very interested in hearing about what folks cannot do when using ALPS for API descriptions. IOW, if this lack of ability to indicate protocol methods a stumbler for some project you're working on?
I am going to go out on a limb and assert that what's going on here is a confusion on the use/value of ALPS vs. specs like RAML, OAI, Blueprint, WSDL, etc.
ALPS was not designed to provide protocol promises. attempts to use ALPS to describe a single protocol detail is always going to be frustrating.consider this...<descriptor id="status" type="safe" />with HTTP, this could be mapped to HTTP.GET, HTTP.OPTIONS, even HTTP.POST (e.g. dropbox's POST-only world, SOAP, etc.).with FTP, this could be mapped to FTP.RETR, FTP.SIZE, FTP.PWD, and others.and the list goes on.We can't predict the exact protocol *method* will be used by a service for this affordance, but we can predict the network *promise* (this is a safe action) that will be offered by that service.even more important, we don't need to predict the method -- that will be provided at runtime with the actual representation that has the affordance details themselves:
I understand the appeal of using ALPS to *generate* service code rather than describe service interfaces, but that's not what ALPS was designed to do. RAML, OAI, Blueprint, WSDL, etc. -- these are designed to define the actual runtime instance of a service described by ALPS.does this help?
However your response seems to evoke a nuance that may have escaped me. My current understanding of non-semantic descriptors tells me that even for a given non-semantic type value (e.g. "Safe"), that we're effectively already describing a potentially large swath of affordances so I don't perceive that stacking up non-sematic types changes the nature of the description.
Maybe I can spin this differently. How would you describe a link to a rsrc that ends up needing to support network promises for all 3 non-semantic types?
Cheers,
Jeff Michaud
I don't use ALPS to describe *resources* at all. I describe a set of data and action elements for a domain. which ones appear on which resources it totally an implementation detail left to the individual services.
in the case you ask about here, i'd simply provide the affordances and let the service make its own decisions about whether one or more of them appear at runtime -- which might even be determined by the rights of the logged-in user and/or the availability of operations on the server side (e.g. "between midnight and 2AM we don't allow POSTing to this resource...")does that help?
LOL,we'll just keep doing this over and over, right?
"The map is not the territory"[0] and ALPS is not the representation. ALPS is not the resource, either.
<alps>...<descriptor id="bp-read" name="blog-post" type="safe" /><descriptor id="bp-write" name="blog-post" type="unsafe" />...</alps>bindings for a selected media type will result in different representations.- HTML will have two forms- Atom might have a single <link id="blog-post" href="..." rel="edit" />- UBER will have multiple <data .. /> elements with the appropriate "action" values- and so forth.
Cheers
Jeff Michaud
Cheers,
Jeff Michaud