chore: add a transition guide. fixes #360 (#363)

Signed-off-by: Lucas Holmquist <lholmqui@redhat.com>
This commit is contained in:
Lucas Holmquist 2020-12-07 11:21:30 -05:00 committed by GitHub
parent 9f86cfdf0e
commit 79296a8e63
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 107 additions and 0 deletions

102
API_TRANSITION_GUIDE.md Normal file
View File

@ -0,0 +1,102 @@
## Deprecated API Transition Guide
When APIs are deprecated, the following guide will show how to transition from removed APIs to the new ones
### Upgrading From 3.x to 4.0
In the 3.2.0 release, a few APIs were set to be deprecated in the 4.0 release. With the release of 4.0.0, those APIs have been removed.
#### Receiever
The `Receiver` class has been removed.
`Receiver.accept` should be transitioned to `HTTP.toEvent`
Here is an example of what a `HTTP.toEvent` might look like using Express.js
```js
const app = require("express")();
const { HTTP } = require("cloudevents");
app.post("/", (req, res) => {
// body and headers come from an incoming HTTP request, e.g. express.js
const receivedEvent = HTTP.toEvent({ headers: req.headers, body: req.body });
console.log(receivedEvent);
});
```
#### Emitter
`Emit.send` should be transitioned to `HTTP.binary` for binary events and `HTTP.structured` for structured events
`Emit.send` would use axios to emit the events. Since this now longer available, you are free to choose your own transport protocol.
So for axios, it might look something like this:
```js
const axios = require('axios').default;
const { HTTP } = require("cloudevents");
const ce = new CloudEvent({ type, source, data })
const message = HTTP.binary(ce); // Or HTTP.structured(ce)
axios({
method: 'post',
url: '...',
data: message.body,
headers: message.headers,
});
```
You may also use the `emitterFor()` function as a convenience.
```js
const axios = require('axios').default;
const { emitterFor, Mode } = require("cloudevents");
function sendWithAxios(message) {
// Do what you need with the message headers
// and body in this function, then send the
// event
axios({
method: 'post',
url: '...',
data: message.body,
headers: message.headers,
});
}
const emit = emitterFor(sendWithAxios, { mode: Mode.BINARY });
emit(new CloudEvent({ type, source, data }));
```
You may also use the `Emitter` singleton
```js
const axios = require("axios").default;
const { emitterFor, Mode, CloudEvent, Emitter } = require("cloudevents");
function sendWithAxios(message) {
// Do what you need with the message headers
// and body in this function, then send the
// event
axios({
method: "post",
url: "...",
data: message.body,
headers: message.headers,
});
}
const emit = emitterFor(sendWithAxios, { mode: Mode.BINARY });
// Set the emit
Emitter.on("cloudevent", emit);
...
// In any part of the code will send the event
new CloudEvent({ type, source, data }).emit();
// You can also have several listener to send the event to several endpoint
```

View File

@ -138,6 +138,11 @@ There are a few trivial example applications in
[the examples folder](https://github.com/cloudevents/sdk-javascript/tree/main/examples).
There you will find Express.js, TypeScript and Websocket examples.
### API Transition Guide
[Guide Link](./API_TRANSITION_GUIDE.md)
## Supported specification features
| Core Specification | [v0.3](https://github.com/cloudevents/spec/blob/v0.3/spec.md) | [v1.0](https://github.com/cloudevents/spec/blob/v1.0/spec.md) |