Pour intégrer, modifier et supprimer des données dans une application, nous voulons utiliser les webservices REST.
J’arrive à lister, modifier et supprimer mes instances d’objets métiers, mais pas à en créer.
Le message d’erreur est “Incorrect row id for creation”, à la fois depuis l’interface intégrée et depuis postman.
Avant de rentrer dans le détails du fonctionnement l’API bas niveau REST puis-je vous demander quelle technologie vous utilisez coté client. Je pose la question car il y a plusieurs “wrappers” au dessus de ces services bas niveau qui évitent de rentrer dans ces détails.
Cela dit, à première vue, votre pb c’est que vous passez un row ID, or celui-ci est créé par Simplicité, on n’est donc pas sensé lui passer à la création (sauf dans des cas particuliers de row ID custom mais je ne pense pas qu’on soit dans un cas de ce genre).
De manière générale, quand vous postez une demande, merci de préciser de quelle version de Simplicité on parle (idéalement avec la release exacte qu’on obtient, par exemple, sur le endpoint /health dans la rubrique [Platform], ex:
OK vous voulez donc faire des appels bas niveau sans l’aide de librairies wrapper (juste pour que vous sachiez que ça existe voici le wrapper node.js + Javascript brower : https://github.com/simplicitesoftware/nodejs-api)
En tapant sur /api/rest/<object name>/0 ça marche mais sans le /0 qui est sensé être optionnel il y a effectivement une erreur "Incorrect row ID for creation". Nous allons regarder car c’est une à priori régression.
En revanche j’ai un autre problème : je reçois un message d’erreur me demandant de compléter les champs obligatoires alors qu’ils sont bien présents dans la requête. Si j’envoie la même requête en passant ces champs en non obligatoires pour tester, mon individu est bien créé :
Je ne constate pas un tel pb sur mes cas de test : si un champ obligatoire est absent j’ai bien un message d’erreur "Field is required ..." et ça n’enregistre pas sinon pas de pb.
Les APIs REST passent par la même validation que la UI. Cette validation vérifie de manière générique que les champs obligatoires sont tous bien renseignés, que les valeurs des champs matchent bien le format paramétré etc. Si des contraintes ou du code pre/post validation est présent ceux-ci s’exécutent aussi. Or ceux ci jouent peut être dans votre cas sur les valeurs de vos champs et/ou sur leur caractère obligatoire…
Selon moi la seule manière de faire des tests REST sans les effets de bord des outils genre Postman ou notre API tester c’est d’utiliser curl en ligne de commande… Votre histoire de quotes est sans doute un pb de format JSON, coté serveur on parse le body JSON avec un org.json.JSONObject si le body est malformé aucun des champs de ce body ne seront pris en compte et vous aurez forcément des messages indiquant que des champs obligatoires sont absent
Le pb du /0 non optionnel est réglé et poussé sur la branche master.
Par contre en faisant les tests associés nous avons rencontré des cas “aléatoire” (i.e. que nous n’avons pas encore bien cernés) où la lecture d’un body JSON correct de la requête tombe en erreur. Dans de tels cas on se retrouve avec des messages "Field is required...". Nous continuons nos investigations sur ce point.
Bonjour David, nous constatons que l’erreur "Field is required..." se reproduit aléatoirement lors de certains de nos appels REST. Avez-vous pu investiguer sur ce problème ?
Merci d’avance,
Guillaume