Ymmärrä pyyntö ja sen kustannus
Esimerkki käyttää kuvitteellista skeemaa: kenttien customer, orders ja total on oltava oikeassa APIssa. Yksi pyyntö voi synnyttää useita palvelinlukuja. RESTkin voi tarjota kohdennettuja vastauksia. Yksi HTTP-päätepiste on GraphQL:ssa tavallinen, ei jokaisen arkkitehtuurin vaatimus.
query RecentOrders($id: ID!) {
customer(id: $id) {
name
orders(first: 5) {
nodes { id total }
}
}
}Vertaa edustavaa tehtävää
- Mittaa tavut, viive, virheet ja palvelintyö samalla näkymällä, oikeuksilla ja realistisilla tietomäärillä.
- Tarkista sivutus, lukujen eräajo N+1-ongelman rajoittamiseksi, välimuisti ja tilien tietojen eristys.
- Arvioi skeeman kehitys, vanhojen asiakkaiden yhteensopivuus ja ylläpito. RESTin säilyttäminen voi olla yksinkertaisempaa.
Valvo oikeuksia ja kuormaa
Tunnista pyynnöt ja valvo objektien sekä kenttien oikeuksia liiketoimintalogiikassa. Rajaa listat, syvyys, aliakset, yhdistetyt operaatiot ja arvioitu kustannus. Pelkkä pyyntötiheys ei kuvaa kuormaa. Introspektion piilottaminen ei korvaa valvontaa; testaa myös kiellot ja osittaiset vastaukset.
Alkuperäiset lähteet
Hallitse GraphQL-skeemaa ja kyselykustannuksia.
GraphQL antaa asiakkaiden valita kenttiä, mutta tämä joustavuus vaatii objekti- ja kenttävaltuutusta. Pelkkä koon tai syvyyden rajoitus ei korvaa kyselyn aiheuttaman työn mittaamista.
- Testaa toisen tilin omistamia arkaluonteisia kenttiä ja objekteja.
- Rajoita ja tarkkaile palvelun kustannuksia, syvyyttä ja pyyntöjen määrää.
- Versioskeeman muutokset ja vanhempien asiakkaiden käyttö.
Ensisijainen lähde: OWASP — GraphQL Cheat Sheet. Aiheeseen liittyvä menetelmä: lue käytännön opas.
ETag, HTTP-välimuisti ja samanaikaiset muutokset
Tämän kieliversion tarkemmat lähdekuvaukset ovat englanniksi.
REST and GraphQL: separate representation and authorisation
An HTTP ETag applies to a selected representation. It is neither permission for every returned object nor a universal consistency contract for GraphQL entities.
- Define which response variants have their own validators.
- Test object and field access independently from HTTP conditions.
- Do not automatically apply the PUT scenario to a GraphQL mutation; specify its concurrency contract.
Explore ETag comparisons and the simulator →
References reviewed · RFC 9110 · §13 · RFC 9111 · RFC 6585 · §3
