Zino API Κοινωνικές διαδικτυακές υπηρεσίες για μηχανές

choochoopilotInternet και Εφαρμογές Web

25 Ιουν 2012 (πριν από 4 χρόνια και 9 μήνες)

373 εμφανίσεις

Zino API
Κοινωνικές διαδικτυακές υπηρεσίες για μηχανές
Dionysis "dionyziz" Zindros
Θεσσαλονίκη, FOSSCOMM 2010
www.kamibu.com
Σκοπός της παρουσίασης
Διασαφήνιση του προβλήματος έλλειψης API στον
κοινωνικό ιστό
Παρουσίαση τη λύσης που προτείνουμε
Ξεκαθάρισμα του ρόλου του Zino API
Τεχνική εξήγηση του Zino API
Συζήτηση πάνω στο Zino API και feedback
Κοινωνικά δίκτυα για ανθρώπους
Πρόβλημα
Μηχανές δεν μπορούν να απαντήσουν σε
σημασιολογικά
ερωτήματα
Δεν υπάρχει εύκολος τρόπος να δημιουργηθούν
προγράμματα
ενοποίησης
κοινωνικών δικτύων
Δεν είναι εύκολη η
εναλλακτική
πρόσβαση σε τέτοιες
εφαρμογές
Η
αλληλεπίδραση
των κοινωνικών δικτύων με άλλα ή με
άλλου είδους υπηρεσίες είναι δύσκολη
Τι είναι ένα API?
Τρόπος επικοινωνίας για μηχανές
Σύνολο βιβλιοθηκών για μηχανές

Δοκιμαστική φάση του API στο Zino
Ιούνιος 2009
Συντονιστής μηχανικός ο Αλέξανδρος Τζωρτζίδης
Αρκετοί τρίτοι προγραμματιστές έδειξαν ενδιαφέρον
Συλλέξαμε feedback σχετικά με πώς πρέπει να το
δομήσουμε
Θέλουμε κάτι:
Εύχρηστο
ακόμα και για ερασιτέχνες προγραμματιστές
Πλήρες
σχετικά με τις λειτουργίες του
Γρήγορο
Ελεγχόμενο
Ανοιχτό
...δεν μας αρκεί ένα API
Κοινωνικά δίκτυα για μηχανές
Γράφω ένα άρθρο στη Wikipedia
Δημοσιεύεται link στο twitter μου
Αλλάζει το zino status
μου
Αλλάζει το facebook status
μου
Κοινωνικά δίκτυα για μηχανές
Ο χρήστης θέτει ένα ερώτημα:
Είναι ο Γιώργος και ο Πέτρος φίλοι;
Η μηχανή π.χ. browser έχει την
απαραίτητη γνώση για να
αναζητήσει την πληροφορία
Δε μας αρκούν τα υπάρχοντα
OpenSocial
της Google
Λύνει ένα διαφορετικό πρόβλημα
Facebook
Connect / Open Graph
Αξιόλογο API
Αφορά μόνο σύνδεση Facebook με άλλες εφαρμογές
Δεν είναι ανοιχτό πρότυπο
FOAF
(Friend Of A Friend)
Χρήσιμο
Ανοιχτό
Ελλιπές
Φλύαρο
Λύνει μόνο
μέρος το προβλήματος
Κοινωνικό σημασιολογικό σύμπαν
και προγραμματιστικές διεπαφές
Πρωτόκολλο
ανταλλαγής δεδομένων
Μέσα
μεταφοράς
Κλάσεις
και
αντικείμενα
Μέθοδοι
Διευθύνσεις
Οντολογικές
αλήθειες
Μορφή
δεδομένων
Πρότυπες
βιβλιοθήκες
Ασφαλής
εξουσιοδότηση
Web services
Πρωτόκολλο ανταλλαγής δεδομένων
Κλασσικό
HTTP
Επιλογή
HTTPS
για ευαίσθητα δεδομένα
Το HTTP δεν είναι τέλειο
Είναι όμως
σίγουρο
και
δοκιμασμένο
Υπάρχουν
βιβλιοθήκες
για όλες σχεδόν τις γλώσσες
Δουλεύει με προγράμματα browser για clients
Δουλεύει με προγράμματα httpd για servers
Όλη αυτή η υποδομή
υπάρχει ήδη
Μέσα μεταφοράς
Εισάγουμε 3 βασικά μέσα μεταφοράς:
1.
Κλασικό HTTP
2.
Ασύγχρονο HTTP
3.
HTTP comet
Σε κάθε μέσο επιτρέπεται και HTTPS
Κλάσεις
Περιγράφουν έναν τύπο αντικειμένων με συγκεκριμένες
κοινές ιδιότητες και μεθόδους π.χ. φωτογραφία
Αντικείμενα
Συγκεκριμένα στιγμιότυπα κλάσεων π.χ. η τάδε
φωτογραφία
Αντικειμενοστραφές μοντέλο
Οι κλάσεις στο Zino
API
Person
Status
Content Entry
Album
Image
Video
Poll
Vote
Option
Journal
Favourite
Οι κλάσεις στο Zino
API
Discussion
Comment
Chat
Channel
Message
Typing
Video
Friendship
Session
...και άλλες...
Παραδείγματα αντικειμένων
Person
: Το μέλος του Zino με ψευδώνυμο
IntzakosD
Image
: Η πιο πρόσφατη εικόνα που ανέβηκε στο Zino
Journal
: Το πιο πρόσφατο ημερολόγιο του χρήστη
petrosagg
Friendship
: Η φιλία ανάμεσα στον
IntzakosD
και
petrosagg
Video Chat
: Η συνομιλία video που συμβαίνει αυτή τη
στιγμή ανάμεσα στους
IntzakosD
και
petrosagg
Είμαστε RESTful
Κάθε κλάση αντιπροσωπεύεται από ένα
resource
Επιτρέπουμε μόνο 5 μεθόδους:
1.
Δημιουργία
2.
Προβολή
3.
Λίστα
4.
Ενημέρωση
5.
Διαγραφή
Δεν επιτρέπουμε άλλες μεθόδους
Login
Register
Προβολή φόρμας δημιουργίας
κλπ.
Αναπαράσταση
Ένα URL αφορά ένα μοναδικό resource
Μπορεί να αφορά ένα συγκεκριμένο αντικείμενο ή μία
συλλογή αντικειμένων ίδιας κλάσης
Η μέθοδος δεν είναι μέρος του URL
http://zino.gr/
users/dionyziz
http://zino.gr/
photos/dionyziz/139
http://zino.gr/
photos/dionyziz

Οι HTTP μέθοδοι είναι ασυνεπείς
Ορθή χρήση HTTP μεθόδων
1.
POST ↔ Δημιουργία
2.
GET ↔ Προβολή, λίστα
3.
PUT ↔ Ενημέρωση
4.
DELETE ↔ Διαγραφή
Αυτό είναι αδύνατο
Οι browsers δεν υποστηρίζουν PUT, DELETE
Το GET έχει περιορισμένο μήκος
Μέχρι την υιοθέτηση του πρότυπου HTML5
Δεν μπορούμε να χρησιμοποιήσουμε το HTTP με συνέπεια!
HTTP μέθοδοι στο Zino API
Επιτρέπεται η "ορθή" χρήση HTTP μεθόδων
Εγγυάται ότι όταν θα βελτιωθούν οι browsers θα είμαστε
forward-compatible
Όλες οι μέθοδοι μπορούν να κληθούν και μέσω POST
Με χρήση κατάλληλης παραμέτρου "method"
Αποφεύγονται οι απαγορεύσεις των browsers
Μορφή διευθύνσεων στο Zino API
Τα URLs μοιάζουν με τη μορφή του
συστήματος αρχείων
Προβολή / Λίστα (GET)
zino.gr/
users
- Όλα τα μέλη
zino.gr/
users/dionyziz
- Το μέλος
dionyziz
zino.gr/
photos
- Όλες οι φωτογραφίες
zino.gr/
photos/dionyziz
- Οι φωτογραφίες του
dionyziz
zino.gr/
photos/dionyziz/132
- Η φωτογραφία 132 του dionyziz
Δημιουργία (CREATE)
zino.gr/
sessions
- Δημιουργία συνόδου (login)
zino.gr/
users
- Δημιουργία χρήστη (register)
Ενημέρωση (PUT)
zino.gr/
users/dionyziz
- Ενημέρωση πληροφοριών προφίλ

Παράμετροι σε προβολή και λίστα
Παραδοσιακή χρήση HTTP GET παραμέτρων
GET
http://zino.gr
/photos
?
page
=
2
GET
http://zino.gr
/users/dionyziz
?
details
=
no
GET
http://zino.gr
/users/dionyziz/comments
?
page
=
2
&
levels
=
3

Παράμετροι στις άλλες μεθόδους
Παραδοσιακή χρήση HTTP POST παραμέτρων
POST
http://zino.gr
/users
username
=
dionyziz
&
realname
=
Dionysis+Zindros
&
email
=
dionyziz%40kamibu.com
PUT

http://zino.gr/
users/dionyziz
email
=
dionyziz%40zino.gr
POST

http://zino.gr/
users/dionyziz
_method
=
put
&email
=
dionyziz%40zino.gr

Φορμαλιστικός ορισμός διευθύνσεων
Ορίζουμε αυστηρά και φορμαλιστικά σε WADL:
Ποιες είναι οι επιτρεπόμενες μέθοδοι
Ποιες είναι οι επιτρεπόμενες διευθύνσεις
Ποιες είναι οι επιτρεπόμενες παράμετροι
Ποιοι είναι οι τύποι παραμέτρων
Τι τύπου είναι το output
Μπορούμε να επιβεβαιώσουμε ότι υλοποιούμε
Όλα τις μεθόδους που πρέπει
Καμία μέθοδο που δεν πρέπει
Κάθε πράκτορας γνωρίζει
ακριβώς
την συμπεριφορά μας
Τα αρχεία ορισμού WADL του Zino API θα δημοσιευθούν.
Μορφή δεδομένων
Χρησιμοποιούμε XML
Το XML μας είναι
σημασιολογικά πυκνό
Είναι επεκτάσιμο
Σε περίπτωση αλλαγών, συνήθως είμαστε backwards
compatible
Είναι συνοπτικό και όχι φλύαρο
Είναι γρήγορο να σταλεί στο δίκτυο με συμπίεση gzip
Γιατί επιλέξαμε XML?
Υπάρχουν πολλές βιβλιοθήκες για την ανάγνωσή του
Μπορεί να μετασχηματιστεί αυτόματα με XSLT
Είναι εύκολο να γίνει debug
Μπορούν να το χειριστούν άμεσα οι γλώσσες του web
PHP
Python
Javascript
Flash
Οδηγεί σε περισσότερα δεδομένα από άλλους τρόπους
serialization, αλλά με χρήση gzip τα πράγματα είναι εντάξει
<social>
Ριζικός κόμβος
στο XML του Zino
Περιγράφει γενικότερα κοινωνικό περιεχόμενο
Μπορεί στις ιδιότητες να έχει meta-πληροφορίες για το
σύνολο των δεδομένων:
generated
="
2010-04-21 14:39:21
"
generator
="
http://beta.zino.gr/xmagent
"
for
="
dionyziz
"
Μπορεί να περιέχει οποιαδήποτε παιδιά που περιγράφουν
κοινωνικές πληροφορίες
<feed>
Περιγράφει μία λίστα από στοιχεία περιεχομένου
Στοιχεία κοινής κλάσης
Μοιάζει με την ετικέτα <feed> του Atom standard
Μπορεί να περιέχει ιδιότητες που αφορούν όλα τη λίστα
type
="
photo
"
count
="
45
"
<entry>
Περιγράφει ένα στοιχείο περιεχομένου
Η κλάση του ορίζεται με type
type
="
photo
"
type
="
journal
"
type
="
poll
"
Το περιεχόμενό του περιλαμβάνει πληροφορίες και τα
δεδομένα του
<author> αναφέρεται στο Person-δημιουργό
<media> αναφορά σε περιεχόμενο πολυμέσων π.χ.
φωτογραφία ή video
<text> αναφορά σε περιεχόμενο κειμένου
Παράδειγμα
<social>

<feed>

<entry type="
photo
" id="
244503
">
<media url="
244503_150.jpg
" />

</entry>

<entry type="
photo
" id="
244502
">
<media url="
244502_150.jpg
" />

</entry>

<entry type="
photo
" id="
244501
">
<media url="
244501_150.jpg
" />

</entry>

</feed>
</social>

<discussion>
Αντιπροσωπεύει μία συζήτηση
Αφορά ένα στοιχείο περιεχομένου
Εικόνα
Ημερολόγιο
Δημοσκόπηση
Άλλο στοιχείο που ορίζει το κοινωνικό δίκτυο
Εμπεριέχει στοιχεία <comment>
Περιλαμβάνει ιδιότητες που αφορούν τη συζήτηση
count
="
2
"
<comment>
Αφορά κάτι που είπε κάποιος
Είναι μέρος μιας συζήτησης
Μπορεί να εμφανιστεί σε πολλές μορφές
Μέσα σε ένα <discussion> που αφορά ένα στοιχείο
Ως άμεσο μήνυμα chat
Ως προσωπικό μήνυμα
Επιτρέπει δενδρική περιγραφή συζήτησης
Μπορεί να εμπεριέχει άλλα <comment>
Το περιεχόμενό του είναι εμπλουτισμένο κείμενο που
περιγράφεται με HTML και μορφοποιείται με CSS
Περιεχόμενο: Κείμενο, εικόνες, σύνδεσμοι, video
Μορφοποίηση: Έντονα, πλάγια, χρώματα
Το επιτρεπόμενο περιεχόμενο και μορφοποίηση
καθορίζεται από τον πράκτορα-πάροχο
Παράδειγμα
<discussion>

<comment id="
4715334
">

<published>
2010-04-20 20:09:52
</published>
<author><name>
mar1no0bi
</name></author>

<text>
&lt;3
</text>

<comment id="
4714790
">

<published>
2010-04-20 17:25:53
</published>
<author><name>
marizza
</name></author>

<text>
<p>τέλεια *__*&lt;3</p>
<p>θα τη βγάλω απ' τα αγαπημένα &gt;.&lt;</p>
</text>

</comment>

</comment>
</discussion>
Πολλά περισσότερα!
<user> για ένα μέλος
Προσωπικές πληροφορίες: Ηλικία, περιοχή, κλπ.
<chatchannel> για ένα κανάλι chat
<favourite> για ένα αγαπημένο
<friend> για μία φιλία
Διαχωρισμός αμοιβαίας φιλίας και φιλίας τύπου "follow"
κ.ό.κ.
Το XML μας έχει μεγάλη
εκφραστική δύναμη
και
σημασιολογική πυκνότητα
.
Φορμαλιστικός ορισμός XML
Ορίζουμε αυστηρά και φορμαλιστικά σε XML Schema:
Ποιο είναι το επιτρεπόμενο συντακτικό
Ποιες είναι οι επιτρεπόμενες ετικέτες
Ποιες είναι οι επιτρεπόμενες ιδιότητες
Ποιοι είναι οι τύποι
Μπορούμε να επιβεβαιώσουμε
Ότι ό,τι παράγουμε μπορεί να γίνει validate
Ότι ένας πράκτορας δουλεύει σωστά
Κάθε πράκτορας γνωρίζει
ακριβώς
την συμπεριφορά μας
Τα αρχεία ορισμού XML Schema του Zino API θα
δημοσιευθούν.
Το API μας είναι και για εμάς
Το API μας χρησιμοποιείται ήδη από τους δικούς μας
μηχανικούς front-end για να αναπτύξουν την διεπαφή
χρήστη του νέου Zino
Είναι υποχρεωτικά πλήρες
Κάθε λειτουργία που μπορεί κανείς να κάνει, μπορεί να γίνει
και θα γίνεται μόνο μέσω API
Δεν θα υπάρχουν κλειστές "εσωτερικές" λειτουργίες
Ήδη έχουμε μία alpha έκδοση του Zino
Πλήρως ανεξάρτητο front-end σε HTML, CSS, Javascript
Μετασχηματισμός XML σε HTML μέσω XSLT
Σχεδόν λειτουργική
Χρησιμοποιεί αποκλειστικά ρουτίνες του ανοιχτού API
"Τα ανοιχτά δεδομένα είναι πιο σημαντικά από το ανοιχτό
λογισμικό."
--Ian Davis, από τους δημιουργούς του RSS

Social Ecosystem
Ένα πραγματικά open API για όλα τα κοινωνικά δίκτυα
Πώς βοηθάμε το σημασιολογικό ιστό
Το πρότυπο μπορεί να χρησιμοποιηθεί από οποιοδήποτε
κοινωνικό δίκτυο ελεύθερα
Έτσι, εφαρμογές γραμμένες για το Zino μπορούν να
δουλεύουν και σε άλλα κοινωνικά δίκτυα
Και το online προφίλ ενός χρήστη μπορεί να "συνενωθεί" με
δεδομένα από διάφορες πηγές
Είμαστε ακόμα σε alpha
Το API που ετοιμάζουμε έχει υλοποιηθεί αλλά δεν είναι
δημόσια διαθέσιμο
Χρειαζόμαστε feedback από developers
Θέλουμε άλλα κοινωνικά δίκτυα να χρησιμοποιήσουν τα
πρότυπα αυτά (social servers)
Θέλουμε να γραφούν εφαρμογές που κάνουν χρήση των
προτύπων (social clients)
Σύντομα θα παρέχουμε πρότυπες βιβλιοθήκες για clients σε
PHP, Python, Javascript
Θα είμαστε δίπλα σας για να σας βοηθήσουμε να
αναπτύξετε πράκτορες-παρόχους ή πράκτορες-
καταναλωτές
Αν είσαι developer θα χαρούμε να ακούσουμε το feedback σου!
Το πρότυπό μας είναι ελεύθερο
Όλα τα specifications θα αναρτηθούν δημόσια
XML Schema
WADL
Η τεκμηρίωση θα διατίθεται online
Δεσμευόμαστε ότι θα παραμείνει
ελεύθερο πρότυπο
και
πάντα
χωρίς πατέντες λογισμικού
Ευχαριστούμε!
Ερωτήσεις;
ψάχνουμε ασυνήθιστα ταλέντα
kamibu.com/join
μίλησέ μας μετά την παρουσίαση