--
You received this message because you are subscribed to the Google Groups "Hypermedia Web" group.
To unsubscribe from this group and stop receiving emails from it, send an email to hypermedia-web+unsubscribe@googlegroups.com.
To post to this group, send email to hypermedia-web@googlegroups.com.
Visit this group at https://groups.google.com/group/hypermedia-web.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "Hypermedia Web" group.
To unsubscribe from this group and stop receiving emails from it, send an email to hypermedia-we...@googlegroups.com.
To post to this group, send email to hyperme...@googlegroups.com.
To unsubscribe from this group and stop receiving emails from it, send an email to hypermedia-web+unsubscribe@googlegroups.com.
To post to this group, send email to hypermedia-web@googlegroups.com.
Visit this group at https://groups.google.com/group/hypermedia-web.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "Hypermedia Web" group.
To unsubscribe from this group and stop receiving emails from it, send an email to hypermedia-web+unsubscribe@googlegroups.com.
To post to this group, send email to hypermedia-web@googlegroups.com.
Interesting question. Not sure if this answers it, but I usually think of hypermedia client as having knowledge of a set of relations (and profiles). Whether these are domain-specific or generic ("get all invoices" vs. "next page") does not really matter. Also, those relations and profiles may have been specified by others, so indeed the definition of "domain" is a bit vague.
Best,Joost
2016-11-30 2:47 GMT+01:00 Jeff Michaud <come...@comcast.net>:
Hello folks,
This started out on twitter https://twitter.com/cometaj2/status/803402436643696640 with the question "Is it fair to say that all navigation via relations is to be considered part of the domain?". I started seeing what appeared to be an interesting inflection between mechanical/reusable generic clients vs intentional navigation (through hypermedia controls).
Everything on the left-side of the inflection point appears to yield easily codified and reusable generic clients. Everything on the right hand side of the inflection point seems to rapidly fan out into complexity and doesn't appear to be as readily codified into generic reusable clients because the navigation is seemingly tied into intent and an understanding of the domain.
The notion of "domain" here may not be appropriate.
Thoughts?
Regards
Jeff Michaud
--
You received this message because you are subscribed to the Google Groups "Hypermedia Web" group.
To unsubscribe from this group and stop receiving emails from it, send an email to hypermedia-we...@googlegroups.com.
To post to this group, send email to hyperme...@googlegroups.com.
Visit this group at https://groups.google.com/group/hypermedia-web.
For more options, visit https://groups.google.com/d/optout.
Hey Jeff,I would say that navigation via relations should be considered part of the "application model." I'd shy away from using "domain," because it may imply "domain model." From my experience, I like to make a distinction between the two.A Domain Model will often include Bounded Contexts that allow a finite scope around the model being defined (e.g., Procurement, Inventory, Shopping).An Application Model will include something akin to a Bounded Context, as well, but in this case, the client-server interaction is a part of that context. APIs are made for consumption, and so the consumption aspects must be considered when developing the model. This could mean pulling together data and behavior from many different Domain Model Bounded Contexts should the consumer require it.The Application Model may include both standard and custom link relations. Those clients that depend only on standard link relations may hit a wall in the interaction at some point, decreasing the potential value of the API.
I'm somewhat skeptical of this future utopia of completely automatic clients. I think the intention has to come from somewhere. Maybe it's pre-programmed in the client. Maybe it's guided by server-hosted rules. Maybe it's the result of some AI program. But it has to be present in order to have meaningful interactions. Anything else is the equivalent of Web-scraping. While this produces some value (e.g., search engines like Google that can surface the functionality to users in a specific context), most of my software experience has been closely targeted to specific business initiatives.The hardest part of wide-spread standards adoption is reaching consensus. For generic clients to be meaningful in complex scenarios, many different elements of one or more standards would have to be developed and agreed upon by the industry. Even then, I've never seen the "canonical model" approach work for anything beyond that which is _extremely_ low in complexity.For that reason, I often promote intentional navigation. Just my two cents. :)
I love this thread!My common practice is to arrange a "contract" between API providers and consumers that includes *all* the data-names (familyName, givenName, userID, startDate, etc.) and action-names (approveInvoice, initiatePayment, blockUser, etc.). I *usually* also include aggregations for data and actions (userInfo = {userID, familyName, givenName, ....}, approveInvoice = {invoiceID, approverName, currentDate, etc.}). I then package this up as a single contract (using ALPS, in my case) with a unique identifier (URI). And that is all I "share" over the wire.I include this URI with *every* message request/response, too. It is my way to saying "OK, we're talking "InvoiceStuff" now. to help whomevber receives the message have the right context.
And I include *all* actions in this contract including things like "first", "next", "previous", "last", "home", "index", "help", etc.Now, my provider might have some internal "domain Model" (invoice-managment) that is used to inform/realize the contract when handling messages. And the API consumer may have some internal domain model (e.g. user-payments) that is used to handle messages. Note that these two models need not _in any way_ match up or share details with the other party's model. The only shared understanding is the data/action contract over the wire.in this way, what is "the specific domain" and/or the "generic client model" blah, blah, blah is not important at run time.Now, there are certainly separations (as i show above) that help during design and even implementation work. keeping this in mind helps when using design tools, coding libraries, etc. but that stuff is just artefacts of the programming process, not the runtime experience.
that's my POV.
To unsubscribe from this group and stop receiving emails from it, send an email to hypermedia-we...@googlegroups.com.
To post to this group, send email to hyperme...@googlegroups.com.
Visit this group at https://groups.google.com/group/hypermedia-web.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "Hypermedia Web" group.
To unsubscribe from this group and stop receiving emails from it, send an email to hypermedia-we...@googlegroups.com.
To post to this group, send email to hyperme...@googlegroups.com.