JobTech Development forum

Hur hämtar man svenska regioner med graphql-editor?

Hur hämtar man svenska regioner med graphql-editor?

Det går utmärkt! Så här:

query MyQuery {
  concepts(id: "i46j_HmG_v64") {
    narrower {
      preferred_label
    }
  }
}
1 gillning

Går det inte att göra samma med mainConcept. Via graphiql blir det olika strukturerar på json result set, vore bra om man kunde få samma struktur på alla frågor, så man bara behöver ha en c# class för att hantera resultatet med i klienten.

Hej Mikael!

Vet inte om detta riktigt besvarar din fråga men testar.

Om man klistrar in graphql-frågan ovan i swagger (under query string, se bild) så får man ut frågan i URL och curl.

Exempelvis ser frågan ovan ut såhär i curl:

curl -X GET "https://taxonomy.api.jobtechdev.se/v1/taxonomy/graphql?query=query%20MyQuery%20%7B%20%20%20concepts%28id%3A%20%22i46j_HmG_v64%22%29%20%7B%20%20%20%20%20narrower%20%7B%20%20%20%20%20%20%20preferred_label%20%20%20%20%20%7D%20%20%20%7D%20%7D" -H "accept: application/json" -H "api-key: 111"

Men som sagt kanske jag missuppfattat frågeställningen, återkom i sådant fall :slight_smile:

Hej @norck !

Min rekommendation är att enbart använda GraphQL för alla frågor, eftersom du kan få ut allt där istället för att använda main/concepts.

Du kan ocskå speca hur du vill ha svaret i din Graph-ql fråga:

Till exempel om du vill döpa om fältnamnen i svaret så kan du göra detta i frågan med hjälp av
“ditt fältnamn” kolon “original fältnamn”
.

query Hamta_svenska_lan {
  koncept: concepts(id: "i46j_HmG_v64") {
    svenska_lan: narrower {
      id
      beteckning: preferred_label
      typ: type
      lan_kod:national_nuts_level_3_code_2019
    }
  }
}

Exempel svar:

{
  "data": {
    "koncept": [
      {
        "svenska_lan": [
          {
            "id": "G6DV_fKE_Viz",
            "beteckning": "Västmanlands län",
            "typ": "region",
            "lan_kod": "19"
          },
          {
            "id": "65Ms_7r1_RTG",
            "beteckning": "Jämtlands län",
            "typ": "region",
            "lan_kod": "23"
          },
          {
            "id": "CifL_Rzy_Mku",
            "beteckning": "Stockholms län",
            "typ": "region",
            "lan_kod": "01"
          },
          {
            "id": "g5Tt_CAV_zBd",
            "beteckning": "Västerbottens län",
            "typ": "region",
            "lan_kod": "24"
          },
          {
            "id": "wjee_qH2_yb6",
            "beteckning": "Hallands län",
            "typ": "region",
            "lan_kod": "13"
          },
          {
            "id": "DQZd_uYs_oKb",
            "beteckning": "Blekinge län",
            "typ": "region",
            "lan_kod": "10"
          },
          {
            "id": "s93u_BEb_sx2",
            "beteckning": "Södermanlands län",
            "typ": "region",
            "lan_kod": "04"
          },
          {
            "id": "CaRE_1nn_cSU",
            "beteckning": "Skåne län",
            "typ": "region",
            "lan_kod": "12"
          },
          {
            "id": "zdoY_6u5_Krt",
            "beteckning": "Västra Götalands län",
            "typ": "region",
            "lan_kod": "14"
          },
          {
            "id": "EVVp_h6U_GSZ",
            "beteckning": "Värmlands län",
            "typ": "region",
            "lan_kod": "17"
          },
          {
            "id": "NvUF_SP1_1zo",
            "beteckning": "Västernorrlands län",
            "typ": "region",
            "lan_kod": "22"
          },
          {
            "id": "9QUH_2bb_6Np",
            "beteckning": "Kalmar län",
            "typ": "region",
            "lan_kod": "08"
          },
          {
            "id": "zupA_8Nt_xcD",
            "beteckning": "Gävleborgs län",
            "typ": "region",
            "lan_kod": "21"
          },
          {
            "id": "tF3y_MF9_h5G",
            "beteckning": "Kronobergs län",
            "typ": "region",
            "lan_kod": "07"
          },
          {
            "id": "9hXe_F4g_eTG",
            "beteckning": "Norrbottens län",
            "typ": "region",
            "lan_kod": "25"
          },
          {
            "id": "oDpK_oZ2_WYt",
            "beteckning": "Dalarnas län",
            "typ": "region",
            "lan_kod": "20"
          },
          {
            "id": "MtbE_xWT_eMi",
            "beteckning": "Jönköpings län",
            "typ": "region",
            "lan_kod": "06"
          },
          {
            "id": "oLT3_Q9p_3nn",
            "beteckning": "Östergötlands län",
            "typ": "region",
            "lan_kod": "05"
          },
          {
            "id": "zBon_eET_fFU",
            "beteckning": "Uppsala län",
            "typ": "region",
            "lan_kod": "03"
          },
          {
            "id": "xTCk_nT5_Zjm",
            "beteckning": "Örebro län",
            "typ": "region",
            "lan_kod": "18"
          },
          {
            "id": "K8iD_VQv_2BA",
            "beteckning": "Gotlands län",
            "typ": "region",
            "lan_kod": "09"
          }
        ]
      }
    ]
  }
}

jag har använt en qry och modifierat något så jag får det resultat jag önskar, men nu har jag problem med att göra anropen med c# httpclient, query delen i anropet måste encodas på något vis och jag får ingen encoding att accepteras av serveren? Vet du hur det skall encodas ?

nedan accepteras ej av servern får badrequest i retur!

string apiquery = “query={concepts(id: “i46j_HmG_v64”, version: “1”, include_deprecated: true) {narrower {id definition preferred_label deprecated_legacy_id deprecated } }}”;
//string encodedApiquery = System.Net.WebUtility.UrlEncode(apiquery);
string encodedApiquery = HttpUtility.UrlEncode(apiquery, new UnicodeEncoding());

Har du möjlighet att använda ett klient-bibliotek för graphql?

Jag såg att det fanns ett för dotnet:

Den har jag redan hämtat hem till projektet, men det är även där en fråga om authentisering, api-key eller annat måste dit och jag har inte funnit några excempel på det, finns det något team som implementerat den i c# projekt?

Det där är inga problem, men det jag vill ha är en dynamisk implementering i c# där vi kan skicka in en query.

Inte startiska rest anrop.

Authenticating with GraphQL

To communicate with the GraphQL server, you’ll need an OAuth token with the right scopes.

Follow the steps in “Creating a personal access token for the command line” to create a token. The scopes you require depends on the type of data you’re trying to request. For example, select the User scopes to request user data. If you need access to repository information, select the appropriate Repository scopes.

To match the behavior of the GraphQL Explorer, request the following scopes:

Hur hanterar jag detta mot Jobtech Taxonomy? Exempel på implementering av authentisering?

Autentisering: sätt request header i http-anropet: api-key=111

Det är gjort får svar: ||Name|Value|Type|
| — | — | — | — |
||Message|“The HTTP request failed with status code MethodNotAllowed”|string|

string apikey = “111”;
string baseaddress = “https://taxonomy.api.jobtechdev.se/v1/taxonomy/graphql”;

        GqlClient = new GraphQLHttpClient(baseaddress, new NewtonsoftJsonSerializer());
        GqlClient.HttpClient.DefaultRequestHeaders.Add("api-key", apikey);

har jag rätt uri?

Ja, din uri ser rätt ut.

https://taxonomy.api.jobtechdev.se/v1/taxonomy/graphql

Gör du en POST eller GET request?

Jag gör en POST.

Finns det några loggar i jobtech taxonomy som kan vara till hjälp här?

Det blir ingen httpresonce bara exception som säget metod arop nekas. och api-key finns som det skall i headern.

Jag behöver hjälp för at komma vidare här.

Jag fick samma fel från ett annat graphql paket jag testade med och det körde äldre webrequest anrop.

Använder graphql.client
Gör detta anrop GqlClient.SendQueryAsync<Models.Concept.Root>(apiquery).Result;

apiquery är
var apiquery = new GraphQL.GraphQLRequest {
Query = @" {
concepts(include_deprecated: false, type: ““municipality””, version: ““1"”) {
id
definition
preferred_label
deprecated
deprecated_legacy_id
}
}”
};
huruvida det är en Post eller Get framgår inte.

Men i den tidigare c# klassen jag provade med kunde jag ändra till get (från post) men det blev samma fel.

Denna exception får jag

InnerException = {“The HTTP request failed with status code MethodNotAllowed”}
ResponseHeaders = {X-Varnish: 2785463
Age: 0
Date: Wed, 30 Sep 2020 08:43:57 GMT
Set-Cookie: 970978b78f4045325d77ab8a8430599b=af7decbe98b570b601b68971a7afc1e4; path=/; HttpOnly
Server: undertow
Via: 1.1 varnish (Varnish/6.2)
}