Web services
Recentemente mi sono dedicato ai web services applicati a Drupal per un progetto IoT, anche per mio promemoria, ho realizzato un poco di documentazione che segnalo alla comunità:
http://www.rfc.it/siti/web-services
Prevedo, tempo permettendo, di integrare con ulteriori note.
Naturalmente sono ben accettati consigli e segnalazione di errori.
Fabrizio
www.rfc.it
Risposte
Grazie mille per il
Grazie mille per il contributo!!! :-D
Ottimo! Qual'è il miglior
Ottimo!
Qual'è il miglior modo di fare un autenticazione da siti esterni? Vorrei infatti avere un drupal centrale con tutti gli utenti, gli stessi che utilizzano altri vecchi ma nesessari, website php.
Vedi:
http://www.drupal.it/supporto/xml-rpc-post-userlogin
Grazie in anticipo per la risposta
Se ti dico che non lo so
Se ti dico che non lo so faccio una brutta figura?
A parte le battute bisogna capire bene cosa vuoi fare.
Se vuoi avere un unico utente per diversi siti forse devi indagare in ambito SSO (sinlge sign on). Questo potrebbe essere un punto di partenza: https://groups.drupal.org/node/182004. Io trovo ottimo usare LDAP come repository degli utenti.
L.'esempio che mi hai citato sembra legato ad un differente problema. Non ho provato con molta attenzione XMLRPC, ma con REST i ho avuto qualcosa che assomiglia al tuo problema.
Finché ho fatto prove con HttpRequester, potevo usare l'URL /endpoint/user/login, gestirmi il token e mi trovavo autenticato.
La stessa chiamata fatto con Linux/python (in Raspberry Pi, per esempio), non mi autenticava. Se dopo il login facevo logout la risposta era 'nessun utente autenticato'. Se ho ben interpretato questo mi sembra il tuo caso.
Il problema è che con HttpRequester, integrato nel browser (firefox), non c'è bisogno di mantenere i parametri si sessione: ci pensa il browser.
Quando accedi in altro modo devi gestire la sessione (Web services sono stateless, o meglio, certamente lo è REST) quindi devi gestire il cookie che ricevi al login. Se credi ho un banalissimo esempio in python.
Spero di essere stato utili.
Saluti,
Fabrizio
Ti aggiungo anche le parti
Ti aggiungo anche le parti essenziali di python, anche se l'esempio è minimale se senza nessun controllo particolare:
<code>
#!/usr/bin/env python
import time
import serial
import requests
import json
base_url = 'http://www.d750.it'
endpoint = '/aws'
def chiama_ws(n_seriale):
# base_url = 'http://d750.loc'
# endpoint = '/aws'
headers = {'Connection':'Keep-Alive'}
login_data = {
'username':'wsuser',
'password':'password'
}
full_url = base_url + endpoint + '/user/login.json'
# dovresti gestire anche il timeout!!!
r = requests.post(
full_url,
headers = headers,
data = login_data
)
# e il return code !!
print "Login stat: ", r.status_code
# print(r.url)
# print(r.content)
# questo è importante per gestire la sessione
session_cookie = r.cookies.get_dict()
retun_data = r.json()
# oppure
#r.json()['token']
# recupero la sessione e il token e bisognerebbe gestire la non esistenza
session = retun_data['sessid']
# print(session)
token = retun_data['token']
# print(token)
headers = {
'Content-type': 'application/json',
'X-CSRF-token': token,
'Connection': 'Keep-Alive'}
body = n_seriale
payload = {
"title": n_seriale,
"promote": "1",
"type": "truck",
"field_commento": {
"und": [{
"value": body ,
"format": None
}]
}
}
full_url = base_url + endpoint + '/node'
r_post = requests.post(
full_url,
headers = headers,
# Nell'Header passo anche i parametri di sessioen
cookies = session_cookie,
data = json.dumps(payload)
)
print "Post stat: ", r_post.status_code
# print r_post.headers
# e ora il logout
full_url = base_url + endpoint + '/user/logout'
r_post = requests.post(
full_url,
headers = headers,
cookies = session_cookie
)
print "Logout stat: ", r_post.status_code
# print r_post.headers
</code>