Add origin=* in the API request query params. This tells the API to include Access-Control-Allow-Origin: * in the response headers. Don't put mode: no-cors.
On Sun, 18 Aug 2024 at 22:29, Roy Smith <r...@panix.com> wrote: > So, after beating my head against this for a couple of days, I've come to > the conclusion that I just don't understand how CORS works. > > If I get the following URL: > https://en.wikipedia.org/w/api.php?action=query&format=json&meta=userinfo&formatversion=2&uiprop=rights > > from a browser, I get what I expect: > > { > "batchcomplete": true, > "query": { > "userinfo": { > "id": 130326, > "name": "RoySmith", > "rights": [ > etc > } > > > On the command-line with curl, likewise something that makes sense: > > { > "batchcomplete" : true, > "query" : { > "userinfo" : { > "anon" : true, > "id" : 0, > etc > } > > > But when I do the same fetch from inside a VUE app: > > <template> > <main> > <button @click="getUserInfo">UserInfo!</button> > </main> > </template> > > <script> > export default { > methods: { > getUserInfo() { > fetch(' > https://en.wikipedia.org/w/api.php?action=query&format=json&meta=userinfo&formatversion=2&uiprop=rights', > { mode: 'no-cors'}) > .then(function (response) { > response > }) > } > } > } > </script> > > > I get a 200 response > > Request URL: > https://en.wikipedia.org/w/api.php?action=query&format=json&meta=userinfo&formatversion=2&uiprop=rights > Request Method: GET > Status Code: 200 OK > Remote Address: (elided) > Referrer Policy: strict-origin-when-cross-origin > > > Request headers: > > :authority: en.wikipedia.org > :method: GET > :path: > /w/api.php?action=query&format=json&meta=userinfo&formatversion=2&uiprop=rights > :scheme: https > accept: */* > accept-encoding: gzip, deflate, br, zstd > accept-language: en-US,en;q=0.9 > dnt: 1 > priority: u=1, i > referer: http://localhost:5173/ > sec-ch-ua: "Not)A;Brand";v="99", "Google Chrome";v="127", > "Chromium";v="127" > sec-ch-ua-mobile: ?0 > sec-ch-ua-platform: "macOS" > sec-fetch-dest: empty > sec-fetch-mode: no-cors > sec-fetch-site: cross-site > user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) > AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 > > > Response headers: > > accept-ranges: bytes > age: 2 > cache-control: private, must-revalidate, max-age=0 > content-disposition: inline; filename=api-result.json > content-encoding: gzip > content-length: 207 > content-type: application/json; charset=utf-8 > date: Sun, 18 Aug 2024 13:45:15 GMT > nel: { "report_to": "wm_nel", "max_age": 604800, "failure_fraction": 0.05, > "success_fraction": 0.0} > report-to: { "group": "wm_nel", "max_age": 604800, "endpoints": [{ "url": " > https://intake-logging.wikimedia.org/v1/events?stream=w3c.reportingapi.network_error&schema_uri=/w3c/reportingapi/network_error/1.0.0" > }] } > server: mw-api-ext.eqiad.main-5744d5b77-fzvxz > server-timing: cache;desc="pass", host;desc="cp1102" > set-cookie: > WMF-Last-Access=18-Aug-2024;Path=/;HttpOnly;secure;Expires=Thu, 19 Sep 2024 > 12:00:00 GMT > set-cookie: WMF-Last-Access-Global=18-Aug-2024;Path=/;Domain=. > wikipedia.org;HttpOnly;secure;Expires=Thu, 19 Sep 2024 12:00:00 GMT > set-cookie: GeoIP=(elided) > set-cookie: NetworkProbeLimit=0.001;Path=/;Secure;SameSite=Lax;Max-Age=3600 > strict-transport-security: max-age=106384710; includeSubDomains; preload > vary: Accept-Encoding > x-cache: cp1102 miss, cp1102 pass > x-cache-status: pass > x-client-ip: (elided) > x-content-type-options: nosniff > x-frame-options: DENY > > > but the response body is empty. Chrome just says "Failed to load response > data: No data found for resource with given identifier". I assume this is > just Chrome's way of saying "Your brain is not big enough to understand how > CORS works". Can anybody help me increase my brain capacity? > > > > On Aug 15, 2024, at 2:36 PM, Roy Smith <r...@panix.com> wrote: > > Thank you to everybody who offered advice. I've set up a Vue/Vite > environment on my laptop and started working my way through the tutorials. > Some stuff makes a lot of sense; other stuff not so much yet, but I'm > working on cleaning out some old neural storage areas to make room for new > knowledge. > > I think what would help me at this point was being able to look at the > source for some well-written Vue apps written to work in the wikipedia > environment. If folks could point me to some examples, I would appreciate > it. Are there higher-level wrappers around the Action API, like pywikibot > for Python, or do you just do raw fetch calls on the API endpoints? > > > On Aug 8, 2024, at 1:14 PM, Travis Briggs <audiod...@gmail.com> wrote: > > Vue.js is definitely a good option. I already had a lot of JavaScript > experience, but I learned Vue at someone's recommendation for a wikimedia > project and it was a great experience. > > One quick tip that might help you: in the "old world" you might use jQuery > or something to do AJAX requests (XHR). However, in modern browsers, the > built-in `fetch` function is more than adequate for almost everything. > > Also, I would highly recommend using create-vue to bootstrap your project, > because it sets up all the complicated JavaScript "compilation" steps for > you, and gives you commands so that you can just do "npm run build" and get > a static site in a single directory. > > Good luck! > -Travis > > On Thu, Aug 8, 2024 at 8:36 AM Kimmo Virtanen <kimmo.virta...@gmail.com> > wrote: > >> Hi, >> >> Vue.js is afaik current choice. >> - https://www.mediawiki.org/wiki/Vue.js >> >> -- Kimmo >> >> On Thu, Aug 8, 2024 at 6:34 PM Roy Smith <r...@panix.com> wrote: >> >>> I'm about to embark on building a client-side javascript tool intended >>> to help with enwiki's [[WP:DYK]] process. JS is not my strength (and what >>> I do know about tooling is quite outdated) so I'm looking for advice on >>> what's in common use in the WMF environment these days. If I'm going to >>> learn some new tools, I figure I might as well learn what folks here are >>> using. If only because it'll make it easier for me to mooch on other >>> people for help :-) >>> >>> As far as testing goes, I used to use JUnit. I gather that's pretty >>> old-hat by now. What are you-all using? >>> >>> And for app frameworks. Angular? React? I hear Vie might be the new >>> hotness? I'm leaning more towards "easy to learn" vs "most powerful". >>> _______________________________________________ >>> Cloud mailing list -- cloud@lists.wikimedia.org >>> List information: >>> https://lists.wikimedia.org/postorius/lists/cloud.lists.wikimedia.org/ >>> >> _______________________________________________ >> Cloud mailing list -- cloud@lists.wikimedia.org >> List information: >> https://lists.wikimedia.org/postorius/lists/cloud.lists.wikimedia.org/ >> > _______________________________________________ > Cloud mailing list -- cloud@lists.wikimedia.org > List information: > https://lists.wikimedia.org/postorius/lists/cloud.lists.wikimedia.org/ > > > > _______________________________________________ > Cloud mailing list -- cloud@lists.wikimedia.org > List information: > https://lists.wikimedia.org/postorius/lists/cloud.lists.wikimedia.org/ >
_______________________________________________ Cloud mailing list -- cloud@lists.wikimedia.org List information: https://lists.wikimedia.org/postorius/lists/cloud.lists.wikimedia.org/