{"action":"created","comment":{"url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/pulls/comments/37977951","id":37977951,"diff_hunk":"@@ -0,0 +1,367 @@\n+Title: Les notifications dans Kinto (Préambule)\n+Lang: fr\n+Url: notifications-kinto-preamble\n+Slug: notifications-kinto-preamble\n+Date: 2015-08-13\n+Summary: Les notifications arrivent dans Kinto ! Voici nos pistes de réflexions.\n+\n+Lors de notre dernière workweek dans l'adorable ville de\n+[Douarnenez](https://www.qwant.com/?q=Douarnenez&t=images) nous avons\n+défini les fondations de la prochaine fonctionnalité de\n+[Kinto](https://kinto.readthedocs.org) : *les notifications !*\n+\n+![Couché de soleil sur Douarnenez (@phrawzty)]({filename}/images/notifications-douarnenez.jpg)\n+\n+# tl;dr\n+\n+Pour ceux qui sont pressé, voici un petit résumé : Nous allons ajouter\n+un système de \"notifications\" à Kinto, sans perdre de vue la\n+simplicité, la modernité et la flexibilité. Notre objectif est de\n+proposer un protocole qui permette à d'autres systèmes de se brancher\n+très simplement sur les notifications d'événements de Kinto.\n+\n+Si ça vous souhaitez en savoir plus, lisez la suite.\n+\n+# Pourquoi ?\n+\n+La réponse la plus simple est que nous en avons besoin à Mozilla. Nous\n+avons une plateforme appelée [Balrog](https://wiki.mozilla.org/Balrog)\n+qui fait partie du système de mise à jour utilisé par Firefox et par\n+d'autres produits Mozilla.\n+\n+Dans l'idée d'améliorer et d'étendre le processus de mise à jour (sous\n+la houlette du projet \"[Go Faster](https://wiki.mozilla.org/Firefox/Go_Faster)\"),\n+nous avons besoin de stocker et de transmettre de petits blocks d'informations à\n+la fois entre des systèmes internes mais aussi avec l'ensemble de nos\n+utilisateurs.\n+\n+Les fonctionnalités de Kinto répondent parfaitement au besoin si ce\n+n'est pour notifier les utilisateurs lors des modifications.\n+\n+Aucun problème. Il ne reste plus qu'à ajouter la fonctionnalité.\n+\n+## Mais attention, à ne pas oublier une petite chose !\n+\n+Bien sur, Kinto est un projet Mozilla - mais il a été conçu comme une\n+solution générique, ce qui veut dire que tous ce que nous ajoutons\n+doit rester raisonablement générique.\n+\n+C'est pourquoi nous avons souhaité proposer une solution réutilisable\n+dans différents contextes ; nous sommes une organisation qui construit\n+avec et pour le web c'est pourquoi la solution que nous proposons est\n+avant tout orienté vers le web.\n+\n+En faisant le tour des paramètrages qu'une solution raisonablement\n+générique devrait proposer, nous avons défini les exigences suivantes\n+pour notre système de notifications :\n+\n+* S'efforcer d'être agnostic autant que possible, c'est à dire ne pas\n+  obliger les développeurs à utiliser telle ou telle solution,\n+  service, backend voire même tel language de programmation.\n+* Puisque nous sommes orienté vers le web, utiliser le protocole HTTP dès que possible.\n+* Le système de notification doit être capable de passer à l'échelle\n+  facilement ; cela s'applique à tous les éventuelles systèmes de\n+  queuing, workers, etc.\n+* Pour finir ce doit être un système robuste, nous ne souhaitons pas perdre de messages.\n+\n+# Qu'est-ce que nous essayons de faire ?\n+\n+Avant de descendre dans les menus détails, prenons un moment pour\n+décrire ce que nous essayons de faire - sur le papier, au moins, c'est\n+assez simple :\n+\n+{% graphviz\n+    dot {\n+        digraph terminology {\n+            rankdir=LR;\n+            subgraph cluster_event {\n+            label=\"Event\";\n+                subgraph cluster_notification {\n+                    label=\"Notification\";\n+                    style=filled;\n+                    color=lightgrey;\n+                    node [style=filled, color=white];\n+                    msg_in [shape=box];\n+                    action [shape=box];\n+                    msg_in -> action [label=1];\n+                }\n+            resultat [shape=box];\n+            action -> resultat [label=2];\n+            msg_out [shape=box];\n+            resultat -> msg_out [label=3];\n+            }\n+        }\n+    }\n+%}\n+\n+* Un *message* est un morceau d'information qui est envoyé d'un\n+  endroit à l'autre - par exemple, une requête HTTP. Les messages\n+  peuvent venir d'autre part, comme par exemple d'un service externe,\n+  ou être généré en interne.\n+* Une *action* est un processus qui est enclenché en fonction du\n+  message. Ça peut être aussi simple qu'incrémenter un compteur en\n+  mémoire. Ça peut aussi être quelque chose de plus complexe comme par\n+  exemple, déclencher une suite de tests. Ça peut aussi être exécuter\n+  une fonctionalités de Kinto, un programme local, une fonctionalité\n+  ajoutée par un plugin ou tout autre chose.\n+* Une *resultat*, comme son nom l'indique, est ce qui résulte de\n+  l'*action*. Un exemple simple pourrait-être la valeur du compteur,\n+  dont nous avons parlé tout à l'heure, sous la forme d'un entier dans\n+  un packet JSON. Mais ça peut également être le résultat de la suite\n+  de tests (les possibilités sont sans limites).\n+* Pris dans leur ensemble, les *évènements* peuvent être vu comme un\n+  cycle : un message est reçu, une action a lieu qui génère un nouveau\n+  message.\n+\n+> Une notification est donc la combinaison d'un message et d'une\n+  action déclenché suite à un évènement. Le résultat, bien que\n+  directement lié à l'action ne fait pas partie de la notification.\n+\n+Cette petite distinction nécessite une explication. L'instigateur du\n+message n'est pas forcément concerné par ce que Kinto va faire avec.\n+\n+En général, il est suffisant de savoir que Kinto a reçu un message et\n+qu'il sera traité. Cela permet de bien découplé les différents\n+éléments du système.\n+\n+Nous allons continuer à explorer le sens des termes par la suite. Pour\n+le moment, continuons.\n+\n+# Comment ?\n+\n+Il y autant de manière de faire qu'il y a de grains de sables sur la\n+plage (ceci dit, nous ne l'avons pas vérifié de manière\n+scientifique). Le meilleur moyen de déterminer l'approche gagnante\n+reste le duel (à la Mad Max). Malheureusement notre manager a mis son\n+véto sur ce moyen pour des questions de responsabilité, à la place\n+nous avons préféré faire des dessins sur un tableau blanc..\n+\n+![Whiteboard (@leplatrem)]({filename}/images/notifications-whiteboard.jpg)\n+\n+Dans un esprit de transparence, voici quelques unes des solutions étudiées :\n+\n+## L'approche simple\n+\n+La première approche et de pousser chacune des notifications dans une\n+queue (dans Redis ou RabbitMQ par exemple) et c'est tout.\n+\n+{% graphviz\n+    dot {\n+        digraph simple {\n+            rankdir=LR;\n+            Kinto [shape=box];\n+            Queue [shape=box];\n+            Consumer [shape=box];\n+            Kinto -> Queue;\n+            Queue -> Consumer [style=dotted];\n+            Consumer -> Queue [style=dotted];\n+        }\n+    }\n+%}\n+\n+Avantages:\n+\n+* Ce modèle impact peu Kinto, Kinto passe simplement le message à la\n+  queue et l'oublie immédiatement.\n+* La quantité de code est assez faible - il ne nécessite que le code\n+  nécessaire pour parler au système de queue.\n+* En fonction de si la communauté Kinto est active il serait\n+  rapidement possible d'avoir le support d'un nombre raisonnable de\n+  service externes de queuing.\n+\n+Inconvénients:\n+\n+* Chaque service de queue nécessirait un module spécifique à coder et\n+  qui devrait être maintenu par la communauté.  * L'utilisateur final\n+  (destinataire, destination ou autre) du message serait responsable\n+  de l'intégration avec le protocole du système de queue.\n+  Autrement dit, si Kinto est configuré pour utiliser RabbitMQ, il\n+  faudra que le consommateur des messages parle RabbitMQ également.\n+* Kinto n'a aucun contrôle ni compréhension de ce qui arrive au\n+  message une fois qu'il a été passé au système de queuing.\n+\n+La simplicité du modèle, bien qu'attractive, possède des défauts\n+importants. Notamment, il va à l'encontre des règles que nous nous\n+sommes fixées du point de vue d'être agnostique techniquement\n+puisqu'il impose une technologie au consomateur des messages.\n+\n+C'est un modèle un peu dangereux car il n'y a aucune garantie que le\n+message arrivent à son destinataire (bien que tous les systèmes de\n+queue ne soient pas tous logés à la même enseigne à ce sujet).\n+\n+## L'approche intégrée\n+\n+L'approche opposée est d'intégrer le système de queue directement dans\n+Kinto et de proposer une interface sur laquelle le consomateur puisse\n+s'enregistrer.\n+\n+{% graphviz\n+    dot {\n+        digraph integrated {\n+            rankdir=LR;\n+            subgraph cluster_internal {\n+                style=filled;\n+                color=lightgrey;\n+                node [style=filled, color=white];\n+                Kinto [shape=box];\n+                Kinto -> internal_queue [label=1, dir=both];\n+                internal_queue -> worker [label=3];\n+            }\n+            Queue [shape=box];\n+            internal_queue -> Queue [label=2, dir=both];\n+            Consumer [shape=box];\n+            worker -> Consumer [label=4, dir=both];\n+        }\n+    }\n+%}\n+\n+Avantages :\n+\n+* Kinto serait livré comme une solution clé en main et bien qu'on\n+  utilise un système de queuing\n+  ([Celery](http://www.celeryproject.org/), par exemple), ce serait\n+  complètement transparent pour l'utilisateur.\n+\n+* Avec ce système complètement intégré, Kinto aurait une visibilité\n+  complète du processus et pourrait vérifier que les messages arrivent\n+  bien à destination.\n+* À l'exception du service de queue, il n'y aurait aucun autre service à déployer.\n+\n+Inconvénient :\n+\n+* Cela ferait considérablement augmenter la portée, la complexité et\n+  la taille de Kinto.\n+* Le fait que le système soit intégré directement dans Kinto nécessite\n+  de redéployer Kinto si le système de notification change.\n+* De la même manière, passer à l'échelle le système de notification\n+  voudrait dire passer Kinto à l'échelle.\n+\n+Ce modèle à certains avantages ; cependant, la quantité de code\n+nécessaire est une raison suffisante pour se poser deux fois la\n+question (le véritable problème étant de ne pas transformer Kinto en\n+une [usine à gaz](https://fr.wikipedia.org/wiki/D%C3%A9rive_des_objectifs)).\n+Comme pour la solution précédente, nous lions l'utilisateur à un\n+système de queues sans respecter notre règle d'agnostisme technique.\n+Enfin, le passage à l'échelle n'apparait pas extrêmement flexible\n+(bien que ça reste de la théorie) - ça semble dommage d'augmenter deux","path":"content/2015.08.notifications-preamble-fr.md","position":246,"original_position":246,"commit_id":"4df893978c0daeda889284550c376f9126a5847f","original_commit_id":"4df893978c0daeda889284550c376f9126a5847f","user":{"login":"Natim","id":229453,"avatar_url":"https://avatars.githubusercontent.com/u/229453?v=3","gravatar_id":"","url":"https://api.github.com/users/Natim","html_url":"https://github.com/Natim","followers_url":"https://api.github.com/users/Natim/followers","following_url":"https://api.github.com/users/Natim/following{/other_user}","gists_url":"https://api.github.com/users/Natim/gists{/gist_id}","starred_url":"https://api.github.com/users/Natim/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Natim/subscriptions","organizations_url":"https://api.github.com/users/Natim/orgs","repos_url":"https://api.github.com/users/Natim/repos","events_url":"https://api.github.com/users/Natim/events{/privacy}","received_events_url":"https://api.github.com/users/Natim/received_events","type":"User","site_admin":false},"body":"Kinto et le système de queue plutôt que juste scaler le broker.","created_at":"2015-08-26T13:01:09Z","updated_at":"2015-08-26T13:01:09Z","html_url":"https://github.com/mozilla-services/servicedenuages.fr/pull/49#discussion_r37977951","pull_request_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/pulls/49","_links":{"self":{"href":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/pulls/comments/37977951"},"html":{"href":"https://github.com/mozilla-services/servicedenuages.fr/pull/49#discussion_r37977951"},"pull_request":{"href":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/pulls/49"}}},"pull_request":{"url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/pulls/49","id":43382451,"html_url":"https://github.com/mozilla-services/servicedenuages.fr/pull/49","diff_url":"https://github.com/mozilla-services/servicedenuages.fr/pull/49.diff","patch_url":"https://github.com/mozilla-services/servicedenuages.fr/pull/49.patch","issue_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/issues/49","number":49,"state":"open","locked":false,"title":"Add notification article french translation.","user":{"login":"Natim","id":229453,"avatar_url":"https://avatars.githubusercontent.com/u/229453?v=3","gravatar_id":"","url":"https://api.github.com/users/Natim","html_url":"https://github.com/Natim","followers_url":"https://api.github.com/users/Natim/followers","following_url":"https://api.github.com/users/Natim/following{/other_user}","gists_url":"https://api.github.com/users/Natim/gists{/gist_id}","starred_url":"https://api.github.com/users/Natim/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Natim/subscriptions","organizations_url":"https://api.github.com/users/Natim/orgs","repos_url":"https://api.github.com/users/Natim/repos","events_url":"https://api.github.com/users/Natim/events{/privacy}","received_events_url":"https://api.github.com/users/Natim/received_events","type":"User","site_admin":false},"body":"r? @phrawzty @ametaireau ","created_at":"2015-08-26T09:41:47Z","updated_at":"2015-08-26T13:01:09Z","closed_at":null,"merged_at":null,"merge_commit_sha":"c1156979912ff9de60d36be209827d86adcb4196","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/pulls/49/commits","review_comments_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/pulls/49/comments","review_comment_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/pulls/comments{/number}","comments_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/issues/49/comments","statuses_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/statuses/4df893978c0daeda889284550c376f9126a5847f","head":{"label":"mozilla-services:translate-notification-article","ref":"translate-notification-article","sha":"4df893978c0daeda889284550c376f9126a5847f","user":{"login":"mozilla-services","id":1066228,"avatar_url":"https://avatars.githubusercontent.com/u/1066228?v=3","gravatar_id":"","url":"https://api.github.com/users/mozilla-services","html_url":"https://github.com/mozilla-services","followers_url":"https://api.github.com/users/mozilla-services/followers","following_url":"https://api.github.com/users/mozilla-services/following{/other_user}","gists_url":"https://api.github.com/users/mozilla-services/gists{/gist_id}","starred_url":"https://api.github.com/users/mozilla-services/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mozilla-services/subscriptions","organizations_url":"https://api.github.com/users/mozilla-services/orgs","repos_url":"https://api.github.com/users/mozilla-services/repos","events_url":"https://api.github.com/users/mozilla-services/events{/privacy}","received_events_url":"https://api.github.com/users/mozilla-services/received_events","type":"Organization","site_admin":false},"repo":{"id":34000996,"name":"servicedenuages.fr","full_name":"mozilla-services/servicedenuages.fr","owner":{"login":"mozilla-services","id":1066228,"avatar_url":"https://avatars.githubusercontent.com/u/1066228?v=3","gravatar_id":"","url":"https://api.github.com/users/mozilla-services","html_url":"https://github.com/mozilla-services","followers_url":"https://api.github.com/users/mozilla-services/followers","following_url":"https://api.github.com/users/mozilla-services/following{/other_user}","gists_url":"https://api.github.com/users/mozilla-services/gists{/gist_id}","starred_url":"https://api.github.com/users/mozilla-services/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mozilla-services/subscriptions","organizations_url":"https://api.github.com/users/mozilla-services/orgs","repos_url":"https://api.github.com/users/mozilla-services/repos","events_url":"https://api.github.com/users/mozilla-services/events{/privacy}","received_events_url":"https://api.github.com/users/mozilla-services/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/mozilla-services/servicedenuages.fr","description":"Da french team blog.","fork":false,"url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr","forks_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/forks","keys_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/teams","hooks_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/hooks","issue_events_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/issues/events{/number}","events_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/events","assignees_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/assignees{/user}","branches_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/branches{/branch}","tags_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/tags","blobs_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/git/refs{/sha}","trees_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/statuses/{sha}","languages_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/languages","stargazers_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/stargazers","contributors_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/contributors","subscribers_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/subscribers","subscription_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/subscription","commits_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/commits{/sha}","git_commits_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/git/commits{/sha}","comments_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/comments{/number}","issue_comment_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/issues/comments{/number}","contents_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/contents/{+path}","compare_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/merges","archive_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/downloads","issues_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/issues{/number}","pulls_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/pulls{/number}","milestones_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/milestones{/number}","notifications_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/labels{/name}","releases_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/releases{/id}","created_at":"2015-04-15T15:07:57Z","updated_at":"2015-07-09T08:57:41Z","pushed_at":"2015-08-26T12:14:08Z","git_url":"git://github.com/mozilla-services/servicedenuages.fr.git","ssh_url":"git@github.com:mozilla-services/servicedenuages.fr.git","clone_url":"https://github.com/mozilla-services/servicedenuages.fr.git","svn_url":"https://github.com/mozilla-services/servicedenuages.fr","homepage":"http://www.servicedenuages.fr","size":5841,"stargazers_count":3,"watchers_count":3,"language":"CSS","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":3,"mirror_url":null,"open_issues_count":6,"forks":3,"open_issues":6,"watchers":3,"default_branch":"master"}},"base":{"label":"mozilla-services:master","ref":"master","sha":"45bcd92f3831147404e873e526cd32b9dd590fce","user":{"login":"mozilla-services","id":1066228,"avatar_url":"https://avatars.githubusercontent.com/u/1066228?v=3","gravatar_id":"","url":"https://api.github.com/users/mozilla-services","html_url":"https://github.com/mozilla-services","followers_url":"https://api.github.com/users/mozilla-services/followers","following_url":"https://api.github.com/users/mozilla-services/following{/other_user}","gists_url":"https://api.github.com/users/mozilla-services/gists{/gist_id}","starred_url":"https://api.github.com/users/mozilla-services/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mozilla-services/subscriptions","organizations_url":"https://api.github.com/users/mozilla-services/orgs","repos_url":"https://api.github.com/users/mozilla-services/repos","events_url":"https://api.github.com/users/mozilla-services/events{/privacy}","received_events_url":"https://api.github.com/users/mozilla-services/received_events","type":"Organization","site_admin":false},"repo":{"id":34000996,"name":"servicedenuages.fr","full_name":"mozilla-services/servicedenuages.fr","owner":{"login":"mozilla-services","id":1066228,"avatar_url":"https://avatars.githubusercontent.com/u/1066228?v=3","gravatar_id":"","url":"https://api.github.com/users/mozilla-services","html_url":"https://github.com/mozilla-services","followers_url":"https://api.github.com/users/mozilla-services/followers","following_url":"https://api.github.com/users/mozilla-services/following{/other_user}","gists_url":"https://api.github.com/users/mozilla-services/gists{/gist_id}","starred_url":"https://api.github.com/users/mozilla-services/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mozilla-services/subscriptions","organizations_url":"https://api.github.com/users/mozilla-services/orgs","repos_url":"https://api.github.com/users/mozilla-services/repos","events_url":"https://api.github.com/users/mozilla-services/events{/privacy}","received_events_url":"https://api.github.com/users/mozilla-services/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/mozilla-services/servicedenuages.fr","description":"Da french team blog.","fork":false,"url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr","forks_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/forks","keys_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/teams","hooks_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/hooks","issue_events_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/issues/events{/number}","events_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/events","assignees_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/assignees{/user}","branches_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/branches{/branch}","tags_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/tags","blobs_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/git/refs{/sha}","trees_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/statuses/{sha}","languages_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/languages","stargazers_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/stargazers","contributors_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/contributors","subscribers_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/subscribers","subscription_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/subscription","commits_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/commits{/sha}","git_commits_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/git/commits{/sha}","comments_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/comments{/number}","issue_comment_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/issues/comments{/number}","contents_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/contents/{+path}","compare_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/merges","archive_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/downloads","issues_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/issues{/number}","pulls_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/pulls{/number}","milestones_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/milestones{/number}","notifications_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/labels{/name}","releases_url":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/releases{/id}","created_at":"2015-04-15T15:07:57Z","updated_at":"2015-07-09T08:57:41Z","pushed_at":"2015-08-26T12:14:08Z","git_url":"git://github.com/mozilla-services/servicedenuages.fr.git","ssh_url":"git@github.com:mozilla-services/servicedenuages.fr.git","clone_url":"https://github.com/mozilla-services/servicedenuages.fr.git","svn_url":"https://github.com/mozilla-services/servicedenuages.fr","homepage":"http://www.servicedenuages.fr","size":5841,"stargazers_count":3,"watchers_count":3,"language":"CSS","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":3,"mirror_url":null,"open_issues_count":6,"forks":3,"open_issues":6,"watchers":3,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/pulls/49"},"html":{"href":"https://github.com/mozilla-services/servicedenuages.fr/pull/49"},"issue":{"href":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/issues/49"},"comments":{"href":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/issues/49/comments"},"review_comments":{"href":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/pulls/49/comments"},"review_comment":{"href":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/pulls/49/commits"},"statuses":{"href":"https://api.github.com/repos/mozilla-services/servicedenuages.fr/statuses/4df893978c0daeda889284550c376f9126a5847f"}}}}