Skip to content

feat: expose a mode and version agnostic event receiver - #120

Merged
lance merged 2 commits into
cloudevents:masterfrom
lance:93-agnostic-receiver
May 6, 2020
Merged

lance merged 2 commits into
cloudevents:masterfrom
lance:93-agnostic-receiver

Conversation

@lance

@lance lance commented May 4, 2020

Copy link
Copy Markdown
Member

Event receivers in the wild may not always know what version or mode an
incoming event is. Instead of requiring developers to inspect the headers
themselves, the SDK should provide an HTTP receiver that is capable of
figuring out what the version and mode (structured/binary) of an incoming
event is and handle it appropriately.

In determining the best way to expose this, I chose to modify the API a
little bit. Now, instead of const CloudEvent = require('cloudevents-sdk');
users need to destructure it.

const { HTTPReceiver, CloudEvent } = require('cloudevents-sdk');

This change should not be backported to 1.x.

Fixes: #93

Signed-off-by: Lance Ball lball@redhat.com

Event receivers in the wild may not always know what version or mode an
incoming event is. Instead of requiring developers to inspect the headers
themselves, the SDK should provide an HTTP receiver that is capable of
figuring out what the version and mode (structured/binary) of an incoming
event is and handle it appropriately.

In determining the best way to expose this, I chose to modify the API a
little bit. Now, instead of `const CloudEvent = require('cloudevents-sdk');`
users need to destructure it.

```js
const { HTTPReceiver, CloudEvent } = require('cloudevents-sdk');
```

This change should not be backported to 1.x.

Fixes: cloudevents#93

Signed-off-by: Lance Ball <lball@redhat.com>
@lance
lance requested review from fabiojose, grant and helio-frota May 4, 2020 21:14
Comment thread lib/bindings/http/http_receiver.js Resolved
Comment thread lib/bindings/http/http_receiver.js Resolved
Comment thread lib/bindings/http/http_receiver.js Resolved
Comment thread lib/bindings/http/http_receiver.js Resolved
lance added a commit to lance/faas-js-runtime that referenced this pull request May 5, 2020
The cloudevents sdk has some inconsistencies with how it exposed the
unmarshalling. Version 0.3 and earlier had an async API, while 1.0
(smartly) changed that. As a result, the impl in this file was pretty
ugly. By using the receivers directly, we can avoid that and clean up
this code.

These changes are based on: cloudevents/sdk-javascript#120

Once those changes land in a released version of the cloudevents sdk
this file can be even simpler as the sdk will handle most of this work.

As an aside - dropped support for 0.2. Normally I wouldn't be so casual about
dropping support, but upstream sdk has no 0.2 support in the next release
and cloud events spec says only the two most recent versions are required
to be supported.
lance added a commit to lance/faas-js-runtime that referenced this pull request May 5, 2020
The cloudevents sdk has some inconsistencies with how it exposed the
unmarshalling. Version 0.3 and earlier had an async API, while 1.0
(smartly) changed that. As a result, the impl in this file was pretty
ugly. By using the receivers directly, we can avoid that and clean up
this code.

These changes are based on: cloudevents/sdk-javascript#120

Once those changes land in a released version of the cloudevents sdk
this file can be even simpler as the sdk will handle most of this work.

As an aside - dropped support for 0.2. Normally I wouldn't be so casual about
dropping support, but upstream sdk has no 0.2 support in the next release
and cloud events spec says only the two most recent versions are required
to be supported.
lance added a commit to lance/faas-js-runtime that referenced this pull request May 5, 2020
The cloudevents sdk has some inconsistencies with how it exposed the
unmarshalling. Version 0.3 and earlier had an async API, while 1.0
(smartly) changed that. As a result, the impl in this file was pretty
ugly. By using the receivers directly, we can avoid that and clean up
this code.

These changes are based on: cloudevents/sdk-javascript#120

Once those changes land in a released version of the cloudevents sdk
this file can be even simpler as the sdk will handle most of this work.

As an aside - dropped support for 0.2. Normally I wouldn't be so casual about
dropping support, but upstream sdk has no 0.2 support in the next release
and cloud events spec says only the two most recent versions are required
to be supported.
Signed-off-by: Lance Ball <lball@redhat.com>
@lance

lance commented May 5, 2020

Copy link
Copy Markdown
Member Author

@danbev thanks for the review - the PR has been updated.

@lance
lance merged commit 54f242b into cloudevents:master May 6, 2020
@lance lance mentioned this pull request May 7, 2020
lance added a commit to nodeshift/faas-js-runtime that referenced this pull request May 7, 2020
The cloudevents sdk has some inconsistencies with how it exposed the
unmarshalling. Version 0.3 and earlier had an async API, while 1.0
(smartly) changed that. As a result, the impl in this file was pretty
ugly. By using the receivers directly, we can avoid that and clean up
this code.

These changes are based on: cloudevents/sdk-javascript#120

Once those changes land in a released version of the cloudevents sdk
this file can be even simpler as the sdk will handle most of this work.

As an aside - dropped support for 0.2. Normally I wouldn't be so casual about
dropping support, but upstream sdk has no 0.2 support in the next release
and cloud events spec says only the two most recent versions are required
to be supported.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Eliminate up-front spec version awareness in the receiver

4 participants