Récupérer une réponse de RESTApi

cancel
Showing results for 
Search instead for 
Did you mean: 
jackarnd
Established Member

Récupérer une réponse de RESTApi

Jump to solution

Bonjour,
J'aimerais parser une chaîne de caractères reçue par : http://localhost:8080/alfresco/api/-default-/public/alfresco/versions/1/people 
J'ai donc écris ce code qui devrait me retourner le nom, le prénom et le mail de la première personne :

<p id="peoplelist"></p>

<script>
   
var people = new XMLHttpRequest();
   
people.onreadystatechange = function() {
      
if (this.readyState == 4 && this.status == 200) {
         
obj = JSON.parse(this.responseText);
         
document.getElementById("peoplelist").innerHTML = obj.list.entries[0].entry.firstName + obj.list.entries[0].entry.lastName + "," + obj..list.entries[0].entry.email;
      
}
   
};
   
people.open('GET', 'http://localhost:8080/alfresco/api/-default-/public/alfresco/versions/1/people'true, 'admin', 'admin');
   
people.send();
</script>

Seulement je reçois une erreur basique d'authentification But this gives me a basic 401 console error about the authentification

:8080/alfresco/api/-default-/public/alfresco/versions/1/people Failed to load resource: the server responded with a status of 401 (Unauthorized)
new-page:1 XMLHttpRequest cannot load http://localhost:8080/alfresco/api/-default-/public/alfresco/versions/1/people. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8081' is therefore not allowed access. The response had HTTP status code 401.

En outre quand je vais manuellement sur http://localhost:8080/alfresco/api/-default-/public/alfresco/versions/1/people la pop-up basique de login s'ouvre et je peux me loguer avec admin/admin normalement et récupérer le résultat attendu :

{"list":{"pagination":{"count":7,"hasMoreItems":false,"totalItems":7,"skipCount":0,"maxItems":100},"entries":[{"entry":{"lastName":"Beecher","userStatus":"Helping to design the look and feel of the new web site","jobTitle":"Graphic Designer","statusUpdatedAt":"2011-02-15T20:20:13.432+0000","mobile":"0112211001100","emailNotificationsEnabled":true,"description":"Alice is a demo user for the sample Alfresco Team site.","telephone":"0112211001100","enabled":false,"firstName":"Alice","skypeId":"abeecher","avatarId":"198500fc-1e99-4f5f-8926-248cea433366","location":"Tilbury, UK","company":{"organization":"Moresby, Garland and Wedge","address1":"200 Butterwick Street","address2":"Tilbury","address3":"UK","postcode":"ALF1 SAM1"},"id":"abeecher","email":"abeecher@example.com"}},{"entry":{"firstName":"Administrator","emailNotificationsEnabled":true,"company":{},"id":"admin","enabled":true,"email":"admin@alfresco.com"}},{"entry":{"firstName":"Alex","lastName":"lol","emailNotificationsEnabled":true,"company":{},"id":"alexandra","enabled":true,"email":"alexandra.lol@test.com"}},{"entry":{"firstName":"Guest","emailNotificationsEnabled":true,"company":{},"id":"guest","enabled":false}},{"entry":{"firstName":"Jack","lastName":"lol","emailNotificationsEnabled":true,"company":{},"id":"jack","enabled":true,"email":"jack.lol@test.com"}},{"entry":{"lastName":"Jackson","userStatus":"Working on a new web design for the corporate site","jobTitle":"Web Site Manager","statusUpdatedAt":"2011-02-15T20:13:09.649+0000","mobile":"012211331100","emailNotificationsEnabled":true,"description":"Mike is a demo user for the sample Alfresco Team site.","telephone":"012211331100","enabled":false,"firstName":"Mike","skypeId":"mjackson","avatarId":"3fbde500-298b-4e80-ae50-e65a5cbc2c4d","location":"Threepwood, UK","company":{"organization":"Green Energy","address1":"100 Cavendish Street","address2":"Threepwood","address3":"UK","postcode":"ALF1 SAM1"},"id":"mjackson","email":"mjackson@example.com"}},{"entry":{"firstName":"Nicolas","lastName":"lol","emailNotificationsEnabled":true,"company":{},"id":"nicolas","enabled":true,"email":"nicolas.lol@test.com"}}]}}

Si quelqu'un sait comment faire pour accéder à cette page avec du code ou où est-ce que je me suis tromper merci d'avance !

1 Solution

Accepted Solutions
jackarnd
Established Member

Re: Récupérer une réponse de RESTApi

Jump to solution

Mon problème ne venait pas de CORS. En effet, il s'agit d'une page custom de Share. Ainsi comme tu me l'a dit précédemment j'aurais du utiliser le proxy de Share. Mais je n'avais pas bien compris.

 

Donc pour appeler cette API depuis Share, j'aurais du utiliser ce lien :

 

http://localhost:8081/share/proxy/alfresco-api/-default-/public/alfresco/versions/1/people 

 

Tout marche correctement maintenant ! Smiley Happy

View solution in original post

13 Replies
ycoulon
Alfresco Employee

Re: Récupérer une réponse de RESTApi

Jump to solution

Bonjour,

Le problème vient des réglages CORS d'Alfresco qui empêche les appels depuis d'autre domaine. 

Pour désactiver cette fonctionnalité vous pouvez jeter un oeil à ce lien : ADF 101 - Getting Started with Alfresco Application Development Framework  qui vous indiquera comment paramétrer votre environnement.

Y.

jackarnd
Established Member

Re: Récupérer une réponse de RESTApi

Jump to solution

Bonjour,

Je ne suis pas sur ADF mais sur des projets générés avec Maven, donc un Alfresco sur le port 8080 et Share sur 8081. C'est donc sur Share que je créée une nouvelle page et que j'intègre ce code-ci. Etant donné que l'interface Share fonctionne normalement sans problème de connectivité j'avais un peu exclu ce problème de CORS même si j'y avais déjà jeté un coup d’œil. Cependant sur des projets type Alfresco-Maven est-il possible d'activer les CORS ? Car sur alfresco-ng2-components/ALFRESCOCORS.md at master · Alfresco/alfresco-ng2-components · GitHub les fichiers et dossiers ne sont pas les mêmes... Le web.xml est différent est bogue lorsque j'essaie de le modifier pour la prise en compte des CORS

ycoulon
Alfresco Employee

Re: Récupérer une réponse de RESTApi

Jump to solution

En fait, peut importe que vous utilisiez ADF ou non. Votre problème n'est pas à ce niveau mais au niveau de la configuration Alfresco qui n'autorise pas les requêtes venant d'un autre domaine. Ce qui empêche votre code javascript coté client d'appeller directement Alfresco sur le port 8080.

Pour palier à cela, étant donné que vous sur Alfresco Share, Share expose un proxy vers Alfresco. Il est disponible à l'adresse http://<host>:<port>/share/proxy/alfresco

Vous pouvez sinon suivre la section 1.2.2. Enabling CORS on Alfresco ECM du lien précédent afin qu'Alfresco autorise les CORS.

Je conseillerai l'utilisation du proxy Share qui est fais pour cela.

Y.

jackarnd
Established Member

Re: Récupérer une réponse de RESTApi

Jump to solution

La page http://localhost:8081/share/proxy/alfresco ne me renvoie rien (une page blanche). Et en console j'obtiens :

alfresco:1 GET http://localhost:8081/share/proxy/alfresco 401 (Unauthorized)
Navigated to http://localhost:8081/share/proxy/alfresco

Pour ce qui est d'activer CORS j'ai mis le .jar dans le repository d'Alfresco mais rien n'y fait..

Mais du coup comment l'interface de Share arrive à récupérer des données de Alfresco ? N'est-il pas censé ne pas pouvoir le faire si les CORS ne sont pas activés ?

ycoulon
Alfresco Employee

Re: Récupérer une réponse de RESTApi

Jump to solution

En local l'adresse : http://localhost:8181/share/proxy/alfresco/  me permet d'accéder à la d'index des webscripts équivalent à l'url suivante :  http://localhost:8181/alfresco/service/index

Il faut néanmoins être connecté (BasicAuth) afin d'accéder à cette page. Je m'aperçoit d'ailleurs que ces API ne sont pas couvert par le proxy étant mappé sur /alfresco/api. Le proxy redirige de /share/proxy/alfresco/(.*) vers /alfresco/s/(.*).

Je trouve étonnant que le jar indiqué ne fonctionnent pas. Quels versions d'Alfresco utiliser-vous ? Comment l'avez vous installer ?

Dans le cas d'un projet maven, j'avais posé la question il y'a quelque temps : Enable CORS for platform ? · Issue #432 · Alfresco/alfresco-sdk · GitHub 

Il vous suffit d'ajouter les dépendances maven suivantes :

<dependency>   <groupId>org.alfresco</groupId>   <artifactId>enablecors</artifactId>   <version>1.0</version> </dependency>
<dependency>     <groupId>com.thetransactioncompany</groupId>     <artifactId>cors-filter</artifactId>     <version>2.5</version> </dependency>

Cela avait fonctionné sur un projet basé sur le SDK 3.0 (en beta à l'époque).

Y.

jackarnd
Established Member

Re: Récupérer une réponse de RESTApi

Jump to solution

Excusez-moi, http://localhost:8081/share/proxy/alfresco me renvoie bien ce qu'on voit sur la page 8080/alfresco il fallait juste que je m'identifie sur Share. Mais du coup, que dois-je faire avec cela ?

jackarnd
Established Member

Re: Récupérer une réponse de RESTApi

Jump to solution

En effet, j'utilise des projets Maven. Dois-je ajouter cette dépendance dans le pom.xml ?

ycoulon
Alfresco Employee

Re: Récupérer une réponse de RESTApi

Jump to solution

Oui sur le projet gérant votre module pour le repository (platform).

Y.

jackarnd
Established Member

Re: Récupérer une réponse de RESTApi

Jump to solution

J'obtiens les mêmes erreurs après ajout de ces dépendances...