williaster opened a new pull request #5772: [superset-client] add 
`SupersetClient`, refactor app
URL: https://github.com/apache/incubator-superset/pull/5772
 
 
   This PR implements 
[SIP-4](https://github.com/apache/incubator-superset/issues/5667), replacing 
all JS ajax calls with a new `SupersetClient` class that handles all async 
requests using `fetch` 🎉  
   
   It's a big PR due to the ajax refactoring, so here's an higher-altitude 
summary:
   
   #### `SupersetClient` usage*
   
   ```javascript
   // appSetup.js
   import SupersetClient from `@superset-ui/core`;
   
   SupersetClient.configure(...clientConfig);
   SupersetClient.init(); // CSRF auth, can also chain `.configure().init();
   
   // anotherFile.js
   import SupersetClient from `@superset-ui/core`;
   
   SupersetClient.post(...requestConfig)
     .then(({ request, json }) => ...)
     .catch((error) => ...);
   ```
   
   *I'm refactoring to this now
   
   #### `SupersetClient` handles:
   - `CSRF` token authentication 
       - it also queues requests in the case that another request is made 
before the token is received
       - it checks for a token before every request, an external app that uses 
this can detect this by catching calls
   - timeouts (not supported by default in fetch)
   - query aborts (also not supported by default in fetch, uses 
`AbortController` polyfill)
   - supports the following configuration options: 
       - `protocol = 'http'`
       - `host`
       - `headers`
       - `credentials = 'same-origin'` (`include` for non-Superset apps)
       - `mode = 'same-origin'`  (`cors` for non-Superset apps)
       - `timeout`
   - supports `get`s and `post`s. I considered adding `put`s/`delete`s but no 
existing ajax calls of this type are currently made
   - a given request supports the following options, which met the need of 
every async call in the app:
     - `url` or `endpoint`
     - `headers`
     - `body`
     - `timeout`
     - `signal` (for aborting, from `const { signal } = (new 
AbortController())`)
     - for posts
       - `postPayload` (key values are added to a `new FormData()`)
       - `stringify` whether to call `JSON.stringify` on `postPayload` values
   
   #### New dependencies
   It introduces the following polyfills:
   - `AbortController`
   - `whatwg-fetch`
   - `mockFetch` for testing
   
   #### How was this tested?
   - attempted to test success + failure of every endpoint that was refactored 
in the browser
   - updated broken / ajax-containing tests
   - (TODO) add `SupersetClient` tests 
   
   #### Next steps
   0. finish todos
   1. merge this PR, test in staging, fix any immediate bugs
   2. move `packages/core` to `superset-ui` repo
   3. update imports to pull from `@superset-ui/core`
   
   #### TODO
   - [x] fix tests
   - [x] debug SQL lab polling
   - [x] remove unused `SupersetClient` methods like `put` and `destroy`
   - [ ] refactor API
   - [ ] rebase
   - [ ] add `SupersetClient` tests
   - [ ] verify sqllab error links
   
   @mistercrunch @kristw @conglei @graceguo-supercat @hughhhh @betodealmeida 
@michellethomas 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to