PlanningPME API - Utvecklingsdokumentation

Koppla samman dina planeringsdata med resten av ditt informationssystem.
PlanningPME tillåter läs- och skrivåtkomst till din databas via ett dedikerat API. PlanningPME API följer den nuvarande utvecklingsstandarden (REST-implementering och JSON-formaterad dataöverföring) för en enkel programmering av dina synkroniseringar och integrationer.

Detta dokument informerar dig om:

PlanningPME API är baserat på RESTful -principer, och standardformatet för dataöverföring är JSON .
Denna dokumentation är främst avsedd för utvecklare. Vi rekommenderar läsaren att bekanta sig med JSON REST API-programmering innan de går vidare.

Dedikerad URL

Varje PlanningPME-kund har sin egen dedikerade API-adress.
Om man antar att ditt varumärke är "MyCompany", bör du förmodligen använda varumärkesnyckeln "mycompany" (ignorera stora bokstäver) för att bygga din API-adress.
Den här nyckeln kommer att visas som " your_brand " i resten av denna dokumentation.

bas-API-adressen för ett varumärke kommer alltid att vara:
https://api.planningpme.com/your_brand/
eller
https://try.planningpme.com/your_brand/

Interaktiv dokumentation

Varje API-märke presenterar också en interaktiv dokumentation, mycket användbar för att upptäcka dina PlanningPME API-metoder och -modeller och bygga API-samtal.

Denna dokumentation finns tillgänglig på följande adress:
https://api.planningpme.com/your_brand/doc/index
eller
https://try.planningpme.com/your_brand/doc/index

Interaktiv dokumentation

Dessa två adresser kan inte anropas utan att presentera en applikationsnyckel .

säkerhet

1/Presentationsnyckel

Du behöver en applikationsnyckel (appkey) för att få åtkomst till ditt API och därmed identifiera den applikation som anropar.
Denna appnyckel är tillgänglig i ditt PlanningPME-konto eller efter begäran från vår support.
Förutom att säkerställa API-åtkomst låter appnyckeln dig bevilja åtkomst till en partner eller en nivå-applikation genom att ge dem en egen nyckel för att identifiera sina anrop till API:t.

Appnyckeln ska alltid skickas i rubrikerna för ett API-samtal genom att använda en dedikerad "X-APPKEY" -rubrik.

GET /your_brand/api/config HTTP/1.1
Host: api.planningpme.com
X-APPKEY: e991573da5ffd4sab9b1e26bc6b64aac

För att få åtkomst till din interaktiva dokumentation, använd din appnyckel som en frågeparameter , som i exemplet nedan:

https://api.planningpme.com/your_brand/doc/index?appkey=e991573da5ffd4sab9b1e26bc6b64aac

2/Användartoken och personifiering

De flesta API-anrop bör vara användarautentiserade för att kunna använda sig av personlig personifiering under dataåtkomsten och respektera definierade användar- och gruppauktorisationer.

En behörighet beviljas genom att skicka användarnamn och lösenord till API:t och sedan få ett token som kommer att användas för att autentisera eller personifiera varje efterföljande API-samtal.

Att få en auktorisationstoken görs alltid genom att posta dessa data till ”/token” url.

POST /votre_marque/token HTTP/1.1
Host: api.planningpme.com
X-APPKEY: e991573da5ffd4sab9b1e26bc6b64aac

grant_type=password&username=your_username&password=your_password

Vid framgångsrik autentisering kommer svaret att innehålla ett JSON-element enligt följande.

{
    "access_token": "KTuZYDLG2qjUMqMVXDuiP9giFbqDXstESvpUWzBFLpkfdlMiB3PD5s2K7En-3o39u56hpr_DlyjEc_oUzBbR0PoEQfOb_O7m5BrLz9vwDzV_YjtRRrQ_7QxYnxO9uZs38SJ7UxTjDZgx_JKRUoZ3Wk6RNnXRpSkcmOrINvJLDMYXptYFiTjn9Op-vkPdtOKFp9M1cNjrH1ho2uaRBpUUMH_vJ-8W8mTH9wgFrJlecGIpntb7jet2GYpGs3Is0gcH",
    "token_type": "bearer",
    "expires_in": 86399,
    "username": "your_username"
}

Värdet på egenskapen "access_token" bör sedan användas i efterföljande godkända förfrågningar till API:t.
Och, som indikerat av "token_type"-egenskapen, är detta värde en bärare-token.

Alla efterföljande godkända samtal ska då presentera rubriken "Auktorisation" med detta specifika "Bärar"-värde.

POST /your_brand/api/customer HTTP/1.1
Host: api.planningpme.com
X-APPKEY: e991573da5ffd4sab9b1e26bc6b64aac
Authorization: Bearer KTuZYDLG2qjUMqMVXDuiP9giFbqDXstESvpUWzBFLpkfdlMiB3PD5s2K7En-3o39u56hpr_DlyjEc_oUzBbR0PoEQfOb_O7m5BrLz9vwDzV_YjtRRrQ_7QxYnxO9uZs38SJ7UxTjDZgx_JKRUoZ3Wk6RNnXRpSkcmOrINvJLDMYXptYFiTjn9Op-vkPdtOKFp9M1cNjrH1ho2uaRBpUUMH_vJ-8W8mTH9wgFrJlecGIpntb7jet2GYpGs3Is0gcH

API-användning

1/Vanliga dataöverväganden

a) Modeller

PlanningPME-datamodeller kan enkelt upptäckas genom att använda interaktiv dokumentation i ditt API.

b) Datumformat

Datumformatet som används av API och förväntas i varje JSON-begäran är ISO 8601-format . Ex:

2018-01-25T18:05:00Z

c) Sorteringslistor

GET-metoder använder ofta en "sortInfo" -parameter för att ställa in sorteringsordningen för den fullständiga/paginerade listan.

Denna information består av namnet på en egenskap direkt följt av ett + eller - tecken.
Använd till exempel "label+" för att sortera efter stigande "etikett"-egenskap.

Det är också möjligt att kombinera flera beställningar genom att förena dem.
Använd till exempel " notValid-label+" för att sortera efter fallande "notValid"-egenskapen sedan efter den stigande "label" -egenskapen.

Observera att egendomsetiketter är skiftlägeskänsliga.

d) Konstanta uppräkningar

Komplett lista med uppräkningar som används med din API-version erhålls genom anropsmetoden "/api/config". Denna lista kan inte ändras förutom framtida tillägg.

GET /your_brand/api/config HTTP/1.1
Host: api.planningpme.com
X-APPKEY: e991573da5ffd4sab9b1e26bc6b64aac

Nedan finns listan med uppräkningar för version 4.1.1.117 av API.

{
  ...
  enums: {
    "Access": {
      "All": 0,
      "Read": 82,
      "Write": 87
    },
    "BillingType": {
      "Package": 0,
      "Unit": 1
    },
    "ConstraintAction": {
      "NoTaskBeforeNbHours": 0,
      "NoTaskBeforeNbDays": 1,
      "NoTaskSamePeriod": 2,
      "NbMaxHours": 3,
      "NbMax": 4,
      "DurationMaxHours": 5,
      "DurationMaxDays": 6
    },
    "ConstraintFor": {
      "All": 0,
      "Resources": 1,
      "Departments": 2
    },
    "ConstraintIf": {
      "Nothing": 0,
      "Nb": 1,
      "NbHours": 2,
      "Begin": 3,
      "End": 4
    },
    "ConstraintOp": {
      "Nothing": 0,
      "Equal": 1,
      "Inf": 2,
      "InfEqual": 3,
      "Sup": 4,
      "SupEqual": 5,
      "Before": 6,
      "After": 7
    },
    "ConstraintType": {
      "Task": 0,
      "Unavailability": 1
    },
    "ConstraintWhat": {
      "LabelAll": 0,
      "LabelExact": 1,
      "LabelBegin": 2
    },
    "ConstraintWhen": {
      "Nothing": 0,
      "Day": 1,
      "Week": 2,
      "Month": 3,
      "Year": 4
    },
    "CustomerType": {
      "Individual": 1026,
      "Company": 1027
    },
    "DataFieldType": {
      "Date": 1,
      "Time": 2,
      "Text": 3,
      "Numeric": 4,
      "Double": 5,
      "Combo": 6,
      "Link": 7,
      "Check": 8,
      "Memo": 9,
      "Separator": 10,
      "File": 11,
      "Position": 12,
      "SignatureMobile": 13,
      "Hyperlink": 16,
      "Startdate": 17,
      "Enddate": 18,
      "Duration": 19,
      "Signature": 20
    },
    "DescriptionFieldType": {
      "Index1": 49,
      "Index2": 50,
      "EmailBody": 69,
      "Label": 76,
      "Mobile": 77,
      "Calendar": 79,
      "EmailSubject": 83,
      "Tooltip": 84
    },
    "Destination": {
      "Task0": 48,
      "Task2": 50,
      "Task3": 51,
      "Task4": 52,
      "Task5": 53,
      "Equipment0": 65,
      "Customer1": 67,
      "MaterialResource1": 77,
      "MaterialResource2": 78,
      "MaterialResource3": 79,
      "Project0": 80,
      "HumanResource1": 82,
      "HumanResource2": 83,
      "Task1": 84,
      "HumanResource3": 86,
      "Customer0": 97,
      "HumanResource0": 98,
      "Customer2": 99,
      "MaterialResource0": 100
    },
    "DestinationType": {
      "Task": 0,
      "Customer": 1,
      "Equipment": 2,
      "Resource": 3,
      "Project": 4
    },
    "HistoryOp": {
      "Insert": 65,
      "Delete": 68,
      "Email": 69,
      "Invitation": 73,
      "Update": 85
    },
    "HistoryType": {
      "Customer": 67,
      "Unavailability": 73,
      "Project": 80,
      "Resource": 82,
      "Task": 84
    },
    "JsonWritingType": {
      "Normal": 1,
      "KeyLabel": 2,
      "String": 3,
      "Data": 4
    },
    "LicenseStatus": {
      "Other": 0,
      "Evaluation": 1,
      "Ok": 2,
      "NoExpirationDate": -8,
      "WrongDatabase": -7,
      "WrongMachine": -6,
      "ResourceCount": -5,
      "LicenseCount": -4,
      "Expired": -3,
      "Empty": -2,
      "Corrupted": -1
    },
    "NotificationType": {
      "None": 0,
      "TaskInsert": 1,
      "TaskUpdate": 2,
      "UnavailabilityInsert": 4,
      "UnavailabilityUpdate": 8
    },
    "OneOrMoreCustomers": {
      "OneCustomer": 1422,
      "MoreCustomer": 1423
    },
    "OneOrMoreResources": {
      "OneResource": 1076,
      "MoreResource": 1077
    },
    "RecurrenceDaily": {
      "AllThe": 1255,
      "AllWorkingDays": 1256
    },
    "RecurrenceMonthly": {
      "Date": 1258,
      "Day": 1259
    },
    "RecurrenceMonthlyDayWhich": {
      "First": 0,
      "Second": 1,
      "Third": 2,
      "Fourth": 3,
      "Last": 4
    },
    "RecurrenceRange": {
      "NoEndDate": 1250,
      "EndThe": 1252
    },
    "RecurrenceType": {
      "Daily": 1246,
      "Weekly": 1247,
      "Monthly": 1248,
      "Yearly": 1249
    },
    "ResourceFilter": {
      "All": 40960,
      "Human": 45056,
      "Material": 49152,
      "ToPlan": 53248
    },
    "ResourceType": {
      "Human": 1035,
      "Material": 1036,
      "ToPlan": 1537
    },
    "TaskType": {
      "Default": 1467,
      "Duration": 1468,
      "Time": 1469
    },
    "Title": {
      "Miss": 0,
      "Mr": 1,
      "Ms": 2
    },
    "TimeLapseUnit": {
      "Day": 0,
      "Week": 1,
      "Month": 2,
      "Year": 3
    },
    "TypeHatch": {
      "BDIAGONAL": 0,
      "CROSS": 1,
      "DIAGCROSS": 2,
      "FDIAGONAL": 3,
      "HORIZONTAL": 4,
      "VERTICAL": 5
    },
    "WorkCapacity": {
      "Hours": 1590,
      "Slots": 1591
    }
  }
  ...

e) Svarsspråk

Det språk som används i svarstexter som t.ex. felmeddelanden kan anges med "Acceptera språk" -rubriken.

Accept-Language: en

De språk som finns tillgängliga i PlanningPME API och PlanningPME WebAccess är: danska (da), nederländska (nl), engelska (en), finska (fi), franska (fr), tyska (de), italienska (it), norska (no) , polska (pl), ryska (ru), spanska (es), svenska (sv).

2/Exempel på API-samtal

I exemplen nedan registreras applikationsnyckeln som " din_nyckel " och bärarens token som " din_token ". Ersätt dessa med dina egna värden.

/api/task

→ Få en fullständig eller numrerad lista med uppgifter med GET "/api/task" -metoden.

GET /your_brand/api/task?pageIndex=1&pageSize=20&sortInfo=label+ HTTP/1.1
Host: api.planningpme.com
X-APPKEY: your_key
Authorization: Bearer your_token

Ger en uppsättning uppgifter som innehåller andra sidan med 20 uppgifter som beställts med fallande etikett.

{
  "totalItems": 97,
  "items": [
    {
      "key": 756,
      "label": "Cours d'anglais pour enfant",
      "type": 1467,
      "style": {
        "backgroundColor": "#65A18D",
        "color": "#000000"
      }
    },
	...
    {
      "key": 131,
      "label": "Coaching",
      "type": 1467,
      "style": {
        "backgroundColor": "#214DE9",
        "color": "#000000"
      }
    }
  ]
}

→ Få en detaljerad uppgift med GET-metoden "/api/task/{id}".

GET /your_brand/api/task/756 HTTP/1.1
Host: api.planningpme.com
X-APPKEY: votre_clé
Authorization: Bearer your_token

Ger en detaljerad representation av uppgiften för uppgiften med id 756.

{
  "key": 756,
  "label": "Cours d'anglais pour enfant",
  "type": 1467,
  "style": {
    "backgroundColor": "#65A18D",
    "color": "#000000"
  },
  "skills": [
    [
      {
        "key": 12,
        "name": "Enfant",
        "label": "Pédagogie > Enfant",
        "level": 1,
        "domain": {
          "key": 4,
          "label": "Pédagogie"
        }
      },
      {
        "key": 83,
        "name": "Anglais",
        "label": "Langue > Anglais",
        "level": 1,
        "domain": {
          "key": 4,
          "label": "Langue"
        }
      }
    ]
  ]
}