{"action":"created","comment":{"url":"https://api.github.com/repos/dart-lang/www.dartlang.org/pulls/comments/30693883","id":30693883,"diff_hunk":"@@ -5,43 +5,170 @@ description: \"Information on server-side programming for Dart.\"\n has-permalinks: false\n ---\n \n+{% include toc.html %}\n+\n # {{ page.title }}\n \n Dart is a great fit for server applications.\n-For example, Dart provides support for\n-[futures](/docs/tutorials/futures) in the core\n-[async](https://api.dartlang.org/apidocs/channels/stable/dartdoc-viewer/dart:asy\n-nc)\n-library, a robust [stream API](/docs/tutorials/streams), and\n-[WebSockets](/samples/websockets/).\n \n-### Where can I find more information about writing server code in Dart?\n+* Runs nearly everywhere\n+* Does nearly everything\n+* Easy to develop and debug\n+* Scales out\n+\n+The Dart VM runs anywhere you can get a Linux, Windows, or Mac prompt.\n+It has been ported to i32, x64, ARM, ARM64, and MIPS.\n+\n+You can access files, UDP and TCP sockets, HTTP, WebSockets, and more with the\n+[dart:io libraries][dart_io_libs]. Write a server, connect to a REST service,\n+parse JSON, and more.\n+\n+Debugging and profiling your server app is easy with\n+[Observatory](/tools/observatory/). Connect\n+to your VM with your browser, and get real-time insight into your running\n+app.\n+\n+Use [Isolates][isolate-docs] for secure, concurrent apps. Spawn an isolate to\n+run Dart\n+functions and libraries in an _isolated heap_, and take advantage of\n+multiple CPU cores.\n+\n+Asynchronous code is easy to write, with the new _async/await/yield_\n+language features.\n+\n+RPC services are easy to create and consume, with the\n+[rpc package](https://github.com/dart-lang/rpc).\n+You can write your RPC server in Dart, and generate client libraries for\n+Java, C#, and more.\n+\n+### Examples\n+\n+Build an HTTP server:\n+\n+{% prettify dart %}\n+import 'dart:io';\n+\n+main() async {\n+  var server = await HttpServer.bind(InternetAddress.LOOPBACK_IP_V4, 8080);\n+  print(\"Serving at ${server.address}:${server.port}\");\n+  \n+  await for (var request in server) {\n+    request.response\n+      ..headers.contentType = new ContentType(\"text\", \"plain\", charset: \"utf-8\")\n+      ..write('Hello, world')\n+      ..close();\n+  }\n+}\n+{% endprettify %}\n+\n+Server WebSockets:\n+\n+{% prettify dart %}\n+import 'dart:io';\n+import 'dart:async';\n+\n+handleMsg(msg) {\n+  print('Message received: $msg');\n+}\n+\n+main() {\n+  runZoned(() async {\n+    var server = await HttpServer.bind('127.0.0.1', 4040);\n+    await for (var req in server) {\n+      if (req.uri.path == '/ws') {\n+        // Upgrade a HttpRequest to a WebSocket connection.\n+        var socket = await WebSocketTransformer.upgrade(req);\n+        socket.listen(handleMsg);\n+      };\n+    }\n+  },\n+  onError: (e) => print(\"An error occurred.\"));\n+}\n+{% endprettify %}\n+\n+Get HTTP resources:\n+\n+{% prettify dart %}\n+import 'package:http/http.dart' as http;\n \n-Get started with [tutorials](/docs/tutorials), [articles](/articles/),\n-and other documentation. Once you're coding, consult the\n+main() async {\n+  var contents = await http.read('http://example.com/');\n+  print(contents);\n+}\n+{% endprettify %}\n+\n+### Get started\n+\n+Start with our [tutorials](/docs/tutorials). Once you're coding, consult the\n [API documentation](https://api.dartlang.org/apidocs/channels/stable/dartdoc-viewer/home).\n \n * [Tutorial: Write Command-Line Apps](/docs/tutorials/cmdline/)\n * [Tutorial: Write HTTP Clients & Servers](/docs/tutorials/httpserver/)\n-* [Articles on a variety of Dart subjects](/articles/),\n-   many written by Dart engineers\n-* [Programmers Guide: Command-Line Apps](/docs/serverguide.html)&mdash;a\n-  collection of links to examples, tools, and other documentation\n-  of interest to server-side programmers\n+* [Walkthrough of a working sample server][walkthrough] complete with\n+  HTTP server, WebSockets, logging, and routing\n+\n+### Get support\n+\n+Join our\n+[cloud@dartlang.org](https://groups.google.com/a/dartlang.org/forum/#!forum/cloud)\n+mailing list and chat with other engineers building\n+server-side Dart apps.\n+\n+Post your \"how-to\" questions to\n+[Stack Overflow](http://stackoverflow.com/tags/dart).\n+\n+And of course, we welcome [bug reports](http://dartbug.com/new).\n+\n+### Libraries\n \n-### Tell me more about the services that Dart supports.\n+There are lots of options for building server-side and command-line\n+apps with Dart. Here are just some of our favorites.\n \n-Check out the following for information about services that Dart supports. \n+[dart:io][dart_io_libs] provides core functionality, such as files, directories,\n+sockets, HTTP, and lots more. [Shelf][shelf] is a middleware system for\n+web servers, with a robust plugin system. [Redstone][redstone] is a\n+server-side microframework for Dart. [MySQL driver][mysql] helps you \n+connect to MySQL from Dart. [PostgreSQL driver][postgres] helps you\n+connect to PostgreSQL from Dart. [Args][args] is a configurable parser of\n+command-line args. [Http][http] helps you easily connect to HTTP resources.\n \n-* [Dart and Google Cloud Platform](google-cloud-platform/)\n-* [Google APIs Client Libraries with Dart](/googleapis/)\n+Check [pub.dartlang.org][pub] for more options and libraries, including\n+ORM, Redis, Mongo, authentication, Google APIs, and more.\n \n-### Where can I host my Dart server?\n+### Learn more\n+\n+Watch this video, recorded at the [Dart Developer Summit](/events/2015/summit/),\n+about moving from Node.js to Dart.\n+\n+<iframe width=\"640\" height=\"360\" src=\"https://www.youtube.com/embed/NHsmiY0rFS8?list=PLOU2XLYxmsIIQorIS8gagUiMau9S84vZV&amp;showinfo=0\" frameborder=\"0\" allowfullscreen></iframe>\n+\n+Then, dive deep with our [articles](/articles/), examples,\n+and other documentation.\n+\n+* [Articles on a variety of Dart subjects](/articles/),\n+   many written by Dart engineers\n+* [Dart by Example][examples] has tons of small code snippets for servers\n+  and consoles\n+\n+### Hosting Dart servers\n \n You have many options. Here are a few:\n \n * Google Cloud Platform; for details on Dart support, see\n   [Dart and Google Cloud Platform](google-cloud-platform)\n+* [Heroku](https://github.com/igrigorik/heroku-buildpack-dart)  \n * [Dartvoid](http://www.dartvoid.com/)\n-* [Amazon Elastic Compute Cloud (EC2)](http://aws.amazon.com/ec2/)\n \n+In addition, Dart runs on most cloud providers, such as\n+Amazon's EC2, Digital Ocean, and more.\n+","path":"src/site/server/index.markdown","position":180,"original_position":180,"commit_id":"3377bfdb8a0d38c574e8ec828f8a073d0673fe5d","original_commit_id":"3377bfdb8a0d38c574e8ec828f8a073d0673fe5d","user":{"login":"sgjesse","id":1343914,"avatar_url":"https://avatars.githubusercontent.com/u/1343914?v=3","gravatar_id":"","url":"https://api.github.com/users/sgjesse","html_url":"https://github.com/sgjesse","followers_url":"https://api.github.com/users/sgjesse/followers","following_url":"https://api.github.com/users/sgjesse/following{/other_user}","gists_url":"https://api.github.com/users/sgjesse/gists{/gist_id}","starred_url":"https://api.github.com/users/sgjesse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sgjesse/subscriptions","organizations_url":"https://api.github.com/users/sgjesse/orgs","repos_url":"https://api.github.com/users/sgjesse/repos","events_url":"https://api.github.com/users/sgjesse/events{/privacy}","received_events_url":"https://api.github.com/users/sgjesse/received_events","type":"User","site_admin":false},"body":"Add if you are using Docker take a look at the base images povided (https://registry.hub.docker.com/u/google/dart/, https://registry.hub.docker.com/u/google/dart-runtime-base/ and https://registry.hub.docker.com/u/google/dart-runtime/.","created_at":"2015-05-20T12:03:34Z","updated_at":"2015-05-20T12:03:34Z","html_url":"https://github.com/dart-lang/www.dartlang.org/pull/1353#discussion_r30693883","pull_request_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/pulls/1353","_links":{"self":{"href":"https://api.github.com/repos/dart-lang/www.dartlang.org/pulls/comments/30693883"},"html":{"href":"https://github.com/dart-lang/www.dartlang.org/pull/1353#discussion_r30693883"},"pull_request":{"href":"https://api.github.com/repos/dart-lang/www.dartlang.org/pulls/1353"}}},"pull_request":{"url":"https://api.github.com/repos/dart-lang/www.dartlang.org/pulls/1353","id":35473234,"html_url":"https://github.com/dart-lang/www.dartlang.org/pull/1353","diff_url":"https://github.com/dart-lang/www.dartlang.org/pull/1353.diff","patch_url":"https://github.com/dart-lang/www.dartlang.org/pull/1353.patch","issue_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/issues/1353","number":1353,"state":"closed","locked":false,"title":"update the server homepage","user":{"login":"sethladd","id":5479,"avatar_url":"https://avatars.githubusercontent.com/u/5479?v=3","gravatar_id":"","url":"https://api.github.com/users/sethladd","html_url":"https://github.com/sethladd","followers_url":"https://api.github.com/users/sethladd/followers","following_url":"https://api.github.com/users/sethladd/following{/other_user}","gists_url":"https://api.github.com/users/sethladd/gists{/gist_id}","starred_url":"https://api.github.com/users/sethladd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sethladd/subscriptions","organizations_url":"https://api.github.com/users/sethladd/orgs","repos_url":"https://api.github.com/users/sethladd/repos","events_url":"https://api.github.com/users/sethladd/events{/privacy}","received_events_url":"https://api.github.com/users/sethladd/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-05-14T23:38:06Z","updated_at":"2015-05-20T12:03:34Z","closed_at":"2015-05-19T19:28:24Z","merged_at":"2015-05-19T19:28:23Z","merge_commit_sha":"c84ab2c64626d71e71a961a541b775a90ce02ca9","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/pulls/1353/commits","review_comments_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/pulls/1353/comments","review_comment_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/pulls/comments{/number}","comments_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/issues/1353/comments","statuses_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/statuses/3377bfdb8a0d38c574e8ec828f8a073d0673fe5d","head":{"label":"dart-lang:server-on-homepage","ref":"server-on-homepage","sha":"3377bfdb8a0d38c574e8ec828f8a073d0673fe5d","user":{"login":"dart-lang","id":1609975,"avatar_url":"https://avatars.githubusercontent.com/u/1609975?v=3","gravatar_id":"","url":"https://api.github.com/users/dart-lang","html_url":"https://github.com/dart-lang","followers_url":"https://api.github.com/users/dart-lang/followers","following_url":"https://api.github.com/users/dart-lang/following{/other_user}","gists_url":"https://api.github.com/users/dart-lang/gists{/gist_id}","starred_url":"https://api.github.com/users/dart-lang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dart-lang/subscriptions","organizations_url":"https://api.github.com/users/dart-lang/orgs","repos_url":"https://api.github.com/users/dart-lang/repos","events_url":"https://api.github.com/users/dart-lang/events{/privacy}","received_events_url":"https://api.github.com/users/dart-lang/received_events","type":"Organization","site_admin":false},"repo":{"id":5441793,"name":"www.dartlang.org","full_name":"dart-lang/www.dartlang.org","owner":{"login":"dart-lang","id":1609975,"avatar_url":"https://avatars.githubusercontent.com/u/1609975?v=3","gravatar_id":"","url":"https://api.github.com/users/dart-lang","html_url":"https://github.com/dart-lang","followers_url":"https://api.github.com/users/dart-lang/followers","following_url":"https://api.github.com/users/dart-lang/following{/other_user}","gists_url":"https://api.github.com/users/dart-lang/gists{/gist_id}","starred_url":"https://api.github.com/users/dart-lang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dart-lang/subscriptions","organizations_url":"https://api.github.com/users/dart-lang/orgs","repos_url":"https://api.github.com/users/dart-lang/repos","events_url":"https://api.github.com/users/dart-lang/events{/privacy}","received_events_url":"https://api.github.com/users/dart-lang/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/dart-lang/www.dartlang.org","description":"Documentation for the Dart language and tools","fork":false,"url":"https://api.github.com/repos/dart-lang/www.dartlang.org","forks_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/forks","keys_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/teams","hooks_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/hooks","issue_events_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/issues/events{/number}","events_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/events","assignees_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/assignees{/user}","branches_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/branches{/branch}","tags_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/tags","blobs_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/git/refs{/sha}","trees_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/statuses/{sha}","languages_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/languages","stargazers_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/stargazers","contributors_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/contributors","subscribers_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/subscribers","subscription_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/subscription","commits_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/commits{/sha}","git_commits_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/git/commits{/sha}","comments_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/comments{/number}","issue_comment_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/issues/comments{/number}","contents_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/contents/{+path}","compare_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/merges","archive_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/downloads","issues_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/issues{/number}","pulls_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/pulls{/number}","milestones_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/milestones{/number}","notifications_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/labels{/name}","releases_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/releases{/id}","created_at":"2012-08-16T16:56:30Z","updated_at":"2015-05-19T01:12:45Z","pushed_at":"2015-05-20T00:14:58Z","git_url":"git://github.com/dart-lang/www.dartlang.org.git","ssh_url":"git@github.com:dart-lang/www.dartlang.org.git","clone_url":"https://github.com/dart-lang/www.dartlang.org.git","svn_url":"https://github.com/dart-lang/www.dartlang.org","homepage":"https://www.dartlang.org","size":451066,"stargazers_count":183,"watchers_count":183,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":154,"mirror_url":null,"open_issues_count":154,"forks":154,"open_issues":154,"watchers":183,"default_branch":"master"}},"base":{"label":"dart-lang:master","ref":"master","sha":"75d87d82fdecedf4c2897044db717f8a521f8f74","user":{"login":"dart-lang","id":1609975,"avatar_url":"https://avatars.githubusercontent.com/u/1609975?v=3","gravatar_id":"","url":"https://api.github.com/users/dart-lang","html_url":"https://github.com/dart-lang","followers_url":"https://api.github.com/users/dart-lang/followers","following_url":"https://api.github.com/users/dart-lang/following{/other_user}","gists_url":"https://api.github.com/users/dart-lang/gists{/gist_id}","starred_url":"https://api.github.com/users/dart-lang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dart-lang/subscriptions","organizations_url":"https://api.github.com/users/dart-lang/orgs","repos_url":"https://api.github.com/users/dart-lang/repos","events_url":"https://api.github.com/users/dart-lang/events{/privacy}","received_events_url":"https://api.github.com/users/dart-lang/received_events","type":"Organization","site_admin":false},"repo":{"id":5441793,"name":"www.dartlang.org","full_name":"dart-lang/www.dartlang.org","owner":{"login":"dart-lang","id":1609975,"avatar_url":"https://avatars.githubusercontent.com/u/1609975?v=3","gravatar_id":"","url":"https://api.github.com/users/dart-lang","html_url":"https://github.com/dart-lang","followers_url":"https://api.github.com/users/dart-lang/followers","following_url":"https://api.github.com/users/dart-lang/following{/other_user}","gists_url":"https://api.github.com/users/dart-lang/gists{/gist_id}","starred_url":"https://api.github.com/users/dart-lang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dart-lang/subscriptions","organizations_url":"https://api.github.com/users/dart-lang/orgs","repos_url":"https://api.github.com/users/dart-lang/repos","events_url":"https://api.github.com/users/dart-lang/events{/privacy}","received_events_url":"https://api.github.com/users/dart-lang/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/dart-lang/www.dartlang.org","description":"Documentation for the Dart language and tools","fork":false,"url":"https://api.github.com/repos/dart-lang/www.dartlang.org","forks_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/forks","keys_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/teams","hooks_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/hooks","issue_events_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/issues/events{/number}","events_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/events","assignees_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/assignees{/user}","branches_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/branches{/branch}","tags_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/tags","blobs_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/git/refs{/sha}","trees_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/statuses/{sha}","languages_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/languages","stargazers_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/stargazers","contributors_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/contributors","subscribers_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/subscribers","subscription_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/subscription","commits_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/commits{/sha}","git_commits_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/git/commits{/sha}","comments_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/comments{/number}","issue_comment_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/issues/comments{/number}","contents_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/contents/{+path}","compare_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/merges","archive_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/downloads","issues_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/issues{/number}","pulls_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/pulls{/number}","milestones_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/milestones{/number}","notifications_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/labels{/name}","releases_url":"https://api.github.com/repos/dart-lang/www.dartlang.org/releases{/id}","created_at":"2012-08-16T16:56:30Z","updated_at":"2015-05-19T01:12:45Z","pushed_at":"2015-05-20T00:14:58Z","git_url":"git://github.com/dart-lang/www.dartlang.org.git","ssh_url":"git@github.com:dart-lang/www.dartlang.org.git","clone_url":"https://github.com/dart-lang/www.dartlang.org.git","svn_url":"https://github.com/dart-lang/www.dartlang.org","homepage":"https://www.dartlang.org","size":451066,"stargazers_count":183,"watchers_count":183,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":154,"mirror_url":null,"open_issues_count":154,"forks":154,"open_issues":154,"watchers":183,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/dart-lang/www.dartlang.org/pulls/1353"},"html":{"href":"https://github.com/dart-lang/www.dartlang.org/pull/1353"},"issue":{"href":"https://api.github.com/repos/dart-lang/www.dartlang.org/issues/1353"},"comments":{"href":"https://api.github.com/repos/dart-lang/www.dartlang.org/issues/1353/comments"},"review_comments":{"href":"https://api.github.com/repos/dart-lang/www.dartlang.org/pulls/1353/comments"},"review_comment":{"href":"https://api.github.com/repos/dart-lang/www.dartlang.org/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/dart-lang/www.dartlang.org/pulls/1353/commits"},"statuses":{"href":"https://api.github.com/repos/dart-lang/www.dartlang.org/statuses/3377bfdb8a0d38c574e8ec828f8a073d0673fe5d"}}}}