Live data from Hacker News

Why we created Taxi, and why we felt the need for another schema language

orbitalhq.com

21–28 of 28 posts

Re: Why we created Taxi, and why we felt the need for another schema language

#21

> Taxi shifts the obligation of describing how things stitch together from Consumers to Producers. Traditionally, it falls to consumers to work out how to do this. And, it’s an expensive question to answer… it involves tracking down API specs, reading docs, and building a mental model of how things hang together. I work on enterprise data platforms and this project sounds very much like the "data mesh" concept where…

> it is even more expensive/slow to have producers try to continuously anticipate the needs of all possible current and future consumers I agree, but I don't think Taxi encourages that. (I sure hope it doesn't). All that's really happening is defining a system-agnostic set of terms, embedding those in producer schemas, and then letting consumers using those same terms to ask for data. Those terms can be used to autom…

What happens when a consumer does not understand the producer’s domain and misuses the data? As we load metadata with semantics of their own, we just kick the can down the road. Metadata is itself semantics about data. In many regulated environments, as producer you are responsible for downstream aggregations etc. I think the idea works great in prototyping, but similar to data mesh, ownership is poorly defined in the presence of aggregate domains and it’s more tuned to operational point to point interfaces.

Re: Why we created Taxi, and why we felt the need for another schema language

#22
Yeah, it's a common problem with non deterministic api schemas, e.g. openapi and swagger (https://swagger.io/specification/), but Taxi looks similar in some aspects to protoforce (https://www.protoforce.io/) except that the types subset is substantially narrower.

Re: Why we created Taxi, and why we felt the need for another schema language

#23
post #8

I think there was a related thread about this in recent weeks but I can't find it. Anyone?

Taxi was discussed 12 months ago here: https://news.ycombinator.com/item?id=31524950

That's the one I was looking for. Thanks!

Taxi: A language for documenting data models and the contracts of APIs - https://news.ycombinator.com/item?id=31524950 - May 2022 (36 comments)

Re: Why we created Taxi, and why we felt the need for another schema language

#24
How do you extend this later, when you need getReviews(id: FilmId, somethingElse) : FilmReview[], andSomethingElse[] ?

   service ReviewsApi {
       @HttpOperation(method = "GET", url = "https://reviews/{id}")
       operation getReviews(id: FilmId): FilmReview[]
   }

Re: Why we created Taxi, and why we felt the need for another schema language

#25

Yeah, it's a common problem with non deterministic api schemas, e.g. openapi and swagger ( https://swagger.io/specification/ ), but Taxi looks similar in some aspects to protoforce ( https://www.protoforce.io/ ) except that the types subset is substantially narrower.

Can you explain what's non-deterministic about swagger/open-api?

Re: Why we created Taxi, and why we felt the need for another schema language

#26

> Taxi shifts the obligation of describing how things stitch together from Consumers to Producers. Traditionally, it falls to consumers to work out how to do this. And, it’s an expensive question to answer… it involves tracking down API specs, reading docs, and building a mental model of how things hang together. I work on enterprise data platforms and this project sounds very much like the "data mesh" concept where…

   > Even though it is expensive/slow for a consumer to figure out how to use data, it is even more expensive/slow to have producers try to continuously anticipate the needs of all possible current and future consumers, rather than focus on their system and have actual consumers figure out how to use the subset of data they need as it changes.
I agree completely on the speed impact but I would go further and say this is basically impossible. I have worked on data everywhere from small to massive enterprises and the only model I have ever see work at a large enterprise is for source systems to just produce data in a raw-ish format that comes out of their system and leave it to the people who need to consume that data to figure out how to massage it into whatever format they need.

The reasons I think it's not possible for upstream to anticipate are:

1) Analytic usecases multiply as systems do and as users start consuming data. As soon as you start using data to address problems in the org, you see more and more questions you would like to use data to address. There is no way for a producer system to forsee all the possible analytic questions people would like to answer using their data, especially as data analysis is a creative endeavour and peoples' imagination is pretty amazing (especially taken collectively).

2) As data sources multiply, the analytical possibilities of combining these data sources explode quadratically. There is no way for any single upstream system to anticipate how this will go.

What upstream systems need to do is produce all the data they can from their system and let users do what they do when combining. You can make some sensible guidelines available (eg "document what the columns mean", "keep up to date estimates of volumes to expect", "have a data sample/staging system/test instance for people to integrate against", "put your goddam timestamps into UTC wherever possible" etc) that aren't too onerous for upstream maintainers to follow if they want to be good citizens.

Re: Why we created Taxi, and why we felt the need for another schema language

#27

I've had my eye on Taxi for a while, and it's neat! I agree that the problems it aims to solve are real and painful in real life. In my experience, I'm not sure people care about schemas or schema languages — they are just implementation details best left under the hood. This is why in my own work, I started on the query end of the spectrum instead. This is why I built Trustfall, a query engine able to query any data…

I agree that querying is where the real value is at, and Trustfall looks like an elegant approach. While Taxi is all about documenting & augmenting specs, Orbital is the query engine (which is a bit similar to Trustfall) that consumes those specs. Orbital's goal is to allow consumers to be able to query for data, without having to be aware of the specifics of the data sets / APIs / DBs, etc they're composing together…

> Orbital is the query engine

So I searched and

https://github.com/orbitalapi/orbital says to use https://hub.docker.com/r/orbitalhq/orbital which has no README

It also says "This repository will contain our open source code, along with issues, discussions and roadmap.", is there an ETA for source code release?

Will the Java application in that docker container be open sourced?

Re: Why we created Taxi, and why we felt the need for another schema language

#28
post #21

Earlier quoted context omitted.

> it is even more expensive/slow to have producers try to continuously anticipate the needs of all possible current and future consumers I agree, but I don't think Taxi encourages that. (I sure hope it doesn't). All that's really happening is defining a system-agnostic set of terms, embedding those in producer schemas, and then letting consumers using those same terms to ask for data. Those terms can be used to autom…

What happens when a consumer does not understand the producer’s domain and misuses the data? As we load metadata with semantics of their own, we just kick the can down the road. Metadata is itself semantics about data. In many regulated environments, as producer you are responsible for downstream aggregations etc. I think the idea works great in prototyping, but similar to data mesh, ownership is poorly defined in th…

> What happens when a consumer does not understand the producer’s domain and misuses the data?

That's a problem with or without Taxi/Orbital.

Today, it's generally left to consumers to pick the fields that look right, and hope they get it right. That's a risky approach. And, by leaving it to consumers, you run the risk on every new integration.

I think by asking producers to annotate their attributes with a strongly defined semantic contract, you reduce the risk of consumers getting it wrong.

Producers understand their data much better than consumers, so are better informed on how to map their attributes to a set of semantic contracts that consumers can leverage.

Post reply on HN