Netflix Releases Falcor Developer Preview
techblog.netflix.com
techblog.netflix.com
I was similarly impressed when I was reading the documentation for Hystrix, which seems to share some functionality with Falcor, like request batching and caching.
The path syntax is very readable and obviously plays to JavaScripts strengths as a dynamic language. However, I would gladly pay the cost of more cumbersome syntax to recover static analyzability through a tool like Flow or TypeScript. With Observables in particular, the ability to track the type of the value inside the Observable is really convenient.
On the other hand, it looks very nice and the document is very well done as well
I really like the concepts and client/server model. If it is performant, it will be fun to see persistent videogame worlds written through falcor. To that end, would it be possible/effective to hang parts of the graph off of WeakMap so that big, not recently used parts of the graph are allowed to fall away? (Perhaps that is how it works right now, I haven't had a chance to look at the source code, pardon my ignorance...)
JSON Graph seems to just need one: { $type: "ref" }
The library bills itself as "middleware", but it looks more like an application framework. I don't see how this would cleanly fit with other application frameworks, as it appears that you have to use Falcor models, routers, and datasources.
The project's code is concerning in a few ways: it's a large codebase, it reads more like C++ than JavaScript, and there's not enough comments. In my experience, successful JavaScript libraries are: small, use JS conventions, and have well-documented source code.
It's great that they are releasing open-source software, though. I hope that this project evolves into something that I want to use.
Implementations in Javascript, Python, Ruby, and Java.
https://gist.github.com/21echoes/a1ca3e4376262da32297
It's definitely designed to be used in a RESTful-esque situation (the reference keys are a type/id tuples), but that's the dominant JSON use case anyway.
For an example of why you'd want type/id tuples over JSOG's plain string @id -- while in the given JSOG example, all items are People, referencing an Address object from Sally (so that Bob can deliver her gift) introduces a potential conflict between Address @id: 1 and Person @id: 1. To disambiguate, you could of course prefix all "@id" value strings with e.g. "address-" or "person-", but then you've just re-invented JSON-API's solution, while making your @id not a real id (not usable in cases like e.g. `api.example.com/resource/<id>`, etc.).
The other solution is to say that JSOG @id's are only for use in one response parsing situation, and could be discarded afterwards. But that seems like quite a waste -- what if e.g. your API wanted to be able to send @id references over the wire without the overhead of sending the whole referenced object?
(Reposting my questions from: https://news.ycombinator.com/item?id=10075433)
The primary advantage of using the Observable's "subscribe" method instead of "then" is that you can cancel a request. Netflix makes heavy use of this feature. For example when quickly browsing through titles, we may cancel the request for data that you are no longer looking at.
If I may suggest it, perhaps you might add this a bit more explicitly to the documentation including possibly an example or two that makes use of them as Observables?
1. https://github.com/omcljs/om/blob/master/dev/om/dev.cljs 2. http://swannodette.github.io/2015/07/29/clojurescript-17/
1. Offline. Making the local datastore as "invisible" as the memory cache and the cloud - keeping everything in sync under the hood. 2. Push. Notifying clients when changes occur. 3. Diff. Efficiently handling changes in larger values.
I realise none of these are central to the challenge they faced, and congratulate them on an elegant solution for their situation.
This seems like it could be as much of a curse as a blessing. I hope 1.0 ships with a good development/debug mode to gauge the efficiency auto-generated requests.