From b78f25c8d1a22fbf306d53e81b0b5a7f1ad49434 Mon Sep 17 00:00:00 2001 From: Mark Hoeber Date: Wed, 11 Mar 2015 10:49:20 -0400 Subject: [PATCH] Platform API Documentation --- .../platform_api/source/authentication.rst | 10 +- docs/en_us/platform_api/source/change_log.rst | 6 +- docs/en_us/platform_api/source/conf.py | 141 ++++++++++++- .../course_structure/course_structure.rst | 193 ++++++++++++++++++ .../source/course_structure/endpoints.rst | 27 +++ .../source/course_structure/index.rst | 12 ++ .../source/course_structure/overview.rst | 31 +++ .../source/enrollment/endpoints.rst | 26 +++ .../source/enrollment/enrollment.rst | 167 +++++++++++++++ .../platform_api/source/enrollment/index.rst | 12 ++ .../source/enrollment/overview.rst | 34 +++ docs/en_us/platform_api/source/index.rst | 44 +++- .../source/{ => mobile}/course_info.rst | 47 +---- .../source/{ => mobile}/endpoints.rst | 8 +- .../platform_api/source/mobile/index.rst | 14 ++ .../platform_api/source/mobile/overview.rst | 40 ++++ .../source/{ => mobile}/users.rst | 119 +---------- .../source/{ => mobile}/video_outlines.rst | 69 +------ docs/en_us/platform_api/source/overview.rst | 57 ++---- .../platform_api/source/user/accounts.rst | 39 ++++ .../platform_api/source/user/endpoints.rst | 22 ++ docs/en_us/platform_api/source/user/index.rst | 12 ++ .../platform_api/source/user/overview.rst | 29 +++ .../images/Announcement_subscriptions.png | Bin 0 -> 43413 bytes docs/en_us/shared/preface.rst | 184 +++++++++++++---- .../course_structure_api/v0/views.py | 102 ++++++--- .../djangoapps/user_api/accounts/views.py | 104 ++++++---- 27 files changed, 1161 insertions(+), 388 deletions(-) create mode 100644 docs/en_us/platform_api/source/course_structure/course_structure.rst create mode 100644 docs/en_us/platform_api/source/course_structure/endpoints.rst create mode 100644 docs/en_us/platform_api/source/course_structure/index.rst create mode 100644 docs/en_us/platform_api/source/course_structure/overview.rst create mode 100644 docs/en_us/platform_api/source/enrollment/endpoints.rst create mode 100644 docs/en_us/platform_api/source/enrollment/enrollment.rst create mode 100644 docs/en_us/platform_api/source/enrollment/index.rst create mode 100644 docs/en_us/platform_api/source/enrollment/overview.rst rename docs/en_us/platform_api/source/{ => mobile}/course_info.rst (82%) rename docs/en_us/platform_api/source/{ => mobile}/endpoints.rst (87%) create mode 100644 docs/en_us/platform_api/source/mobile/index.rst create mode 100644 docs/en_us/platform_api/source/mobile/overview.rst rename docs/en_us/platform_api/source/{ => mobile}/users.rst (54%) rename docs/en_us/platform_api/source/{ => mobile}/video_outlines.rst (51%) create mode 100644 docs/en_us/platform_api/source/user/accounts.rst create mode 100644 docs/en_us/platform_api/source/user/endpoints.rst create mode 100644 docs/en_us/platform_api/source/user/index.rst create mode 100644 docs/en_us/platform_api/source/user/overview.rst create mode 100644 docs/en_us/shared/images/Announcement_subscriptions.png diff --git a/docs/en_us/platform_api/source/authentication.rst b/docs/en_us/platform_api/source/authentication.rst index 1ee2520fb5..a650658ba8 100644 --- a/docs/en_us/platform_api/source/authentication.rst +++ b/docs/en_us/platform_api/source/authentication.rst @@ -1,23 +1,23 @@ .. _edX API Authentication: ############################# -edX API Authentication +EdX API Authentication ############################# - ************* OAuth 2.0 ************* -The edX Platform API uses OAuth 2.0 for authentication. OAuth 2.0 is an open +The edX Platform APIs use OAuth 2.0 for authentication. OAuth 2.0 is an open standard used by many systems that require secure user authentication. See the `OAuth 2.0 Standard`_ standard for more information. - *************************************** Registering with Your Open edX Instance *************************************** -To use the edX Platform API with courses on you instance of Open edX, you must register your application with the Open edX server. See the OAuth 2.0 specification for details. +To use the edX Platform API with courses on your instance of Open edX, you must +register your application with the Open edX server. See the OAuth 2.0 +specification for details. .. include:: links.rst \ No newline at end of file diff --git a/docs/en_us/platform_api/source/change_log.rst b/docs/en_us/platform_api/source/change_log.rst index 87ca5f97c8..e2bd75451a 100644 --- a/docs/en_us/platform_api/source/change_log.rst +++ b/docs/en_us/platform_api/source/change_log.rst @@ -3,7 +3,7 @@ Change Log ############ ***************** -January, 2015 +2015 ***************** .. list-table:: @@ -12,5 +12,9 @@ January, 2015 * - Date - Change + * - 2 April 2015 + - Added the :ref:`EdX Platform Course Structure API Version 0`, :ref:`edX + Platform Enrollment API Version 1.0` and :ref:`edX Platform User API + Version 0` sections. * - 29 January 2015 - Added the :ref:`Get or Change User Status in a Course` section. diff --git a/docs/en_us/platform_api/source/conf.py b/docs/en_us/platform_api/source/conf.py index 41df4a3c25..3b89f8b45e 100644 --- a/docs/en_us/platform_api/source/conf.py +++ b/docs/en_us/platform_api/source/conf.py @@ -40,10 +40,141 @@ MOCK_MODULES = [ 'opaque_keys.edx.locator', 'LibraryLocator', 'Location', + 'ipware', + 'ip', + 'ipware.ip', + 'get_ip', + 'pygeoip', + 'ipaddr', + 'django_countries', + 'fields', + 'django_countries.fields', + 'opaque_keys', + 'opaque_keys.edx', + 'opaque_keys.edx.keys', + 'CourseKey', + 'UsageKey', + 'BlockTypeKey', + 'opaque_keys.edx.locations', + 'SlashSeparatedCourseKey', + 'Locator', + 'south', + 'modelsinspector', + 'south.modelsinspector', + 'add_introspection_rules', + 'courseware', + 'access', + 'courseware.access', + 'is_mobile_available_for_user', + 'courseware.model_data', + 'courseware.module_render', + 'courseware.views', + 'util.request', + 'eventtracking', + 'xmodule', + 'xmodule.exceptions', + 'xmodule.modulestore', + 'xmodule.modulestore.exceptions', + 'xmodule.modulestore.django', + 'courseware.models', + 'milestones', + 'milestones.api', + 'milestones.models', + 'milestones.exceptions', + 'ratelimitbackend', + 'analytics', + 'courseware.courses', + 'staticfiles', + 'storage', + 'staticfiles.storage', + 'content', + 'xmodule.contentstore', + 'xmodule.contentstore.content', + 'xblock.exceptions', + 'xmodule.seq_module', + 'xmodule.vertical_module', + 'xmodule.x_module', + 'nltk', + 'ratelimitbackend', + 'ratelimitbackend.exceptions', + 'social', + 'social.apps', + 'social.apps.django_app', + 'social.backends', + 'mako', + 'exceptions', + 'mako.exceptions', + 'boto', + 'exception', + 'boto.exception', + 'PIL', + 'reportlab', + 'lib', + 'reportlab.lib', + 'pdfgen', + 'canvas', + 'pdfgen', + 'pdfgen.canvas', + 'reportlab.pdfgen', + 'reportlab.pdfgen.canvas', + 'reportlab.lib.pagesizes', + 'reportlab.lib.units', + 'reportlab.lib.styles', + 'reportlab.platypus', + 'reportlab.platypus.tables', + 'boto', + 's3', + 'connection', + 'boto.s3', + 'boto.s3.connection', + 'boto.s3.key', + 'Crypto', + 'Crypto.Cipher', + 'Crypto.PublicKey', + 'openid', + 'store', + 'interface', + 'openid.store', + 'store.interface', + 'openid.store.interface', + 'external_auth.views', + 'html_to_text', + 'mail_utils', + 'ratelimitbackend.backends', + 'social.apps.django_app.default', + 'social.exceptions', + 'social.pipeline', + 'xmodule.error_module', + 'accounts.api', + 'modulestore.mongo.base', + 'xmodule.modulestore.mongo', + 'xmodule.modulestore.mongo.base', + 'edxval', + 'edxval.api', + 'model_utils', + 'model_utils.models', + 'model_utils.managers', + 'certificates', + 'certificates.models', + 'certificates.models.GeneratedCertificate', + 'shoppingcart', + 'shopppingcart.models', + 'shopppingcart.api', + 'api', + 'student', + 'student.views', + 'student.forms', + 'student.models', + 'celery', + 'celery.task', + 'student.roles', + 'embargo.models', + 'xmodule.vertical_block', + 'vertical_block' ] for mod_name in MOCK_MODULES: - sys.modules[mod_name] = mock.Mock() + sys.modules[mod_name] = mock.Mock(class_that_is_extended=object) on_rtd = os.environ.get('READTHEDOCS', None) == 'True' @@ -73,11 +204,9 @@ if not on_rtd: # only import and set the theme if we're building docs locally root = path('../../../..').abspath() sys.path.insert(0, root) sys.path.append(root / "common/lib/xmodule") +sys.path.append(root / "common/djangoapps") sys.path.append(root / "lms/djangoapps") -sys.path.append(root / "lms/djangoapps/mobile_api") -sys.path.append(root / "lms/djangoapps/mobile_api/course_info") -sys.path.append(root / "lms/djangoapps/mobile_api/users") -sys.path.append(root / "lms/djangoapps/mobile_api/video_outlines") +sys.path.append(root / "openedx/core/djangoapps") sys.path.insert( 0, @@ -105,7 +234,7 @@ extensions = [ 'sphinx.ext.todo', 'sphinx.ext.coverage', 'sphinx.ext.pngmath', 'sphinx.ext.mathjax', 'sphinx.ext.viewcode', 'sphinxcontrib.napoleon'] -project = u'edX Platform API Version 0.5 Alpha' +project = u'EdX Platform APIs' copyright = u'2015, edX' exclude_patterns = ['build', 'links.rst'] diff --git a/docs/en_us/platform_api/source/course_structure/course_structure.rst b/docs/en_us/platform_api/source/course_structure/course_structure.rst new file mode 100644 index 0000000000..97bb8a80c3 --- /dev/null +++ b/docs/en_us/platform_api/source/course_structure/course_structure.rst @@ -0,0 +1,193 @@ +######################################## +Course Structure API Module +######################################## + +This page contains information on using the Course Structure API to +complete these actions: + +* :ref:`Get a list of courses in the edX platform ` + +* :ref:`Get details about a course ` + +* :ref:`Get a course's structure, or blocks ` + +* :ref:`Get a courses grading policy ` + +.. _Get a List of Courses: + +************************** +Get a List of Courses +************************** + +.. autoclass:: course_structure_api.v0.views.CourseList + +**Example response** + +.. code-block:: json + + { + "count": 809, + "next": "https://courses.edx.org/api/course_structure/v0/courses/?page=3", + "previous": "https://courses.edx.org/api/course_structure/v0/courses/?page=1", + "num_pages": 81, + "results": [ + { + "id": "ANUx/ANU-ASTRO1x/1T2014", + "name": "Greatest Unsolved Mysteries of the Universe", + "category": "course", + "org": "ANUx", + "run": "1T2014", + "course": "ANU-ASTRO1x", + "uri": "https://courses.edx.org/api/course_structure/v0/courses/ANUx/ANU-ASTRO1x/1T2014/", + "image_url": "/c4x/ANUx/ANU-ASTRO1x/asset/dome_dashboard.jpg", + "start": "2014-03-24T18:30:00Z", + "end": null + }, + { + "id": "ANUx/ANU-ASTRO4x/1T2015", + "name": "COSMOLOGY", + "category": "course", + "org": "ANUx", + "run": "1T2015", + "course": "ANU-ASTRO4x", + "uri": "https://courses.edx.org/api/course_structure/v0/courses/ANUx/ANU-ASTRO4x/1T2015/", + "image_url": "/c4x/ANUx/ANU-ASTRO4x/asset/ASTRO4x_dashboard_image.jpeg", + "start": "2015-02-03T00:00:00Z", + "end": "2015-04-28T23:30:00Z" + } + . . . + ] + } +.. _Get Course Details: + +************************** +Get Course Details +************************** + +.. autoclass:: course_structure_api.v0.views.CourseDetail + +**Example response** + +.. code-block:: json + + HTTP 200 OK + Vary: Accept + Content-Type: text/html; charset=utf-8 + Allow: GET, HEAD, OPTIONS + + { + "id": "ANUx/ANU-INDIA1x/1T2014", + "name": "Engaging India", + "category": "course", + "org": "ANUx", + "run": "1T2014", + "course": "ANU-INDIA1x", + "uri": "https://courses.edx.org/api/course_structure/v0/courses/ANUx/ANU-INDIA1x/1T2014/", + "image_url": "/c4x/ANUx/ANU-INDIA1x/asset/homepage_course_image.jpg", + "start": "2014-04-29T01:00:00Z", + "end": "2014-07-21T01:00:00Z" + } + +.. _Get the Course Structure: + +************************** +Get the Course Structure +************************** + +.. autoclass:: course_structure_api.v0.views.CourseStructure + +**Example response** + +.. code-block:: json + + { + "root": "i4x://ANUx/ANU-INDIA1x/course/1T2014", + "blocks": { + "i4x://ANUx/ANU-INDIA1x/html/834f845ae8b944f1882f14ce6417c9d1": { + "id": "i4x://ANUx/ANU- + INDIA1x/html/834f845ae8b944f1882f14ce6417c9d1", + "type": "html", + "display_name": "", + "graded": false, + "format": null, + "children": [] + }, + "i4x://ANUx/ANU-INDIA1x/html/c3493aaebaba4ab6a0499fbc27ac3b0e": { + "id": "i4x://ANUx/ANU- + INDIA1x/html/c3493aaebaba4ab6a0499fbc27ac3b0e", + "type": "problem", + "display_name": "Check your learning - Part 1", + "graded": true, + "format": null, + "children": [] + }, + "i4x://ANUx/ANU-INDIA1x/sequential/3731eee6a39c473c98ef6a5c3f56c04c": { + "id": "i4x://ANUx/ANU- + INDIA1x/sequential/3731eee6a39c473c98ef6a5c3f56c04c", + "type": "sequential", + "display_name": "Reflective project", + "graded": true, + "format": "Reflective Project", + "children": [ + "i4x://ANUx/ANU- + INDIA1x/vertical/efe3f47a5bc24894b726c229d6bf5968", + "i4x://ANUx/ANU- + INDIA1x/vertical/9106a1b1fad040858bad56fe5d48074e", + "i4x://ANUx/ANU- + INDIA1x/vertical/27d2cf635bd44038a1207461b761a63a", + "i4x://ANUx/ANU- + INDIA1x/vertical/94b719b765b046e2a811f1c4e4f84e5b" + ] + }, + "i4x://ANUx/ANU-INDIA1x/vertical/0a3cd583cb1d4108bfbdaf57c511da3a": { + "id": "i4x://ANUx/ANU- + INDIA1x/vertical/0a3cd583cb1d4108bfbdaf57c511da3a", + "type": "vertical", + "display_name": "What you need to do this week", + "graded": false, + "format": null, + "children": [ + "i4x://ANUx/ANU-INDIA1x/html/a20abbba4a0f4a578d96cbdd4b34307b" + ] + }, + . . . + } + +.. _Get the Course Grading Policy: + +***************************** +Get the Course Grading Policy +***************************** + +.. autoclass:: course_structure_api.v0.views.CourseGradingPolicy + +**Example response** + +.. code-block:: json + + HTTP 200 OK + Vary: Accept + Content-Type: text/html; charset=utf-8 + Allow: GET, HEAD, OPTIONS + + [ + { + "assignment_type": "Week 1 Survey", + "count": 2, + "dropped": 1, + "weight": 0.03 + }, + { + "assignment_type": "Week 5 Survey", + "count": 2, + "dropped": 1, + "weight": 0.03 + }, + { + "assignment_type": "Reflective Project", + "count": 1, + "dropped": 0, + "weight": 0.2 + }, + . . . + ] diff --git a/docs/en_us/platform_api/source/course_structure/endpoints.rst b/docs/en_us/platform_api/source/course_structure/endpoints.rst new file mode 100644 index 0000000000..fa96bc08dd --- /dev/null +++ b/docs/en_us/platform_api/source/course_structure/endpoints.rst @@ -0,0 +1,27 @@ +.. _EdX Platform Course Structure API Endpoints: + +################################################ +Course Structure API Endpoints +################################################ + +You use the Course Structure API to view information about +courses. + +The following tasks and endpoints are currently supported. + + +.. list-table:: + :widths: 10 70 + :header-rows: 1 + + * - To: + - Use this endpoint: + * - :ref:`Get a list of courses in the edX platform ` + - GET /api/course_structure/v0/courses/ + * - :ref:`Get details about a course ` + - GET /api/course_structure/v0/courses/{course_id}/ + * - :ref:`Get a course's structure, or blocks ` + - GET /api/course_structure/v0/course_structures/{course_id}/ + * - :ref:`Get a course's grading policy ` + - GET /api/course_structure/v0/grading_policies/{course_id}/ + \ No newline at end of file diff --git a/docs/en_us/platform_api/source/course_structure/index.rst b/docs/en_us/platform_api/source/course_structure/index.rst new file mode 100644 index 0000000000..0aa08224af --- /dev/null +++ b/docs/en_us/platform_api/source/course_structure/index.rst @@ -0,0 +1,12 @@ +.. _EdX Platform Course Structure API Version 0: + +############################################# +Course Structure API Version 0 +############################################# + +.. toctree:: + :maxdepth: 2 + + overview + endpoints + course_structure diff --git a/docs/en_us/platform_api/source/course_structure/overview.rst b/docs/en_us/platform_api/source/course_structure/overview.rst new file mode 100644 index 0000000000..099f362359 --- /dev/null +++ b/docs/en_us/platform_api/source/course_structure/overview.rst @@ -0,0 +1,31 @@ +.. _EdX Platform Course Structure API Overview: + +################################################ +Course Structure API Overview +################################################ + +Use the edX Platform Course Structure API to view course details, including the +blocks in the course and the course grading policy. + +******************************************** +Course Structure API Version 0 +******************************************** + +The Course Structure API is currently at version 0. We plan on making +significant enhancements to this API. Currently the Course Structure API is for +internal use only; third parties cannot use the API to access course structure +data. + +*********************************************** +Course Structure API Capabilities +*********************************************** + +With the Course Structure API, you can complete these tasks. + +* :ref:`Get a list of courses in the edX platform ` + +* :ref:`Get details about a course ` + +* :ref:`Get a course's structure, or blocks ` + +* :ref:`Get a course's grading policy ` diff --git a/docs/en_us/platform_api/source/enrollment/endpoints.rst b/docs/en_us/platform_api/source/enrollment/endpoints.rst new file mode 100644 index 0000000000..377d1be4db --- /dev/null +++ b/docs/en_us/platform_api/source/enrollment/endpoints.rst @@ -0,0 +1,26 @@ +.. _edX Enrollment API Endpoints: + +################################################ +Enrollment API Endpoints +################################################ + +You use the Enrollment API to view information about users and +their course enrollments, course information, and videos and transcripts. + +The following tasks and endpoints are currently supported. + + +.. list-table:: + :widths: 10 70 + :header-rows: 1 + + * - To: + - Use this endpoint: + * - :ref:`Get the user's enrollment status in a course ` + - /api/enrollment/v1/enrollment/{user_id},{course_id} + * - :ref:`Get enrollment details for a course` + - /api/enrollment/v1/course/{course_id} + * - :ref:`View a user's enrollments ` + - /api/enrollment/v1/enrollment + * - :ref:`Enroll a user in a course ` + - /api/enrollment/v1/enrollment{“course_details”:{“course_id”:“*course_id*”}} \ No newline at end of file diff --git a/docs/en_us/platform_api/source/enrollment/enrollment.rst b/docs/en_us/platform_api/source/enrollment/enrollment.rst new file mode 100644 index 0000000000..504b455e06 --- /dev/null +++ b/docs/en_us/platform_api/source/enrollment/enrollment.rst @@ -0,0 +1,167 @@ +################################################## +Enrollment API Module +################################################## + +This page contains information on using the Enrollment API to complete +these actions: + +* :ref:`Get the user's enrollment status in a course ` +* :ref:`Get enrollment details for a course` +* :ref:`View a user's enrollments ` +* :ref:`Enroll a user in a course ` + + +.. _Get the Users Enrollment Status in a Course: + +******************************************** +Get the User's Enrollment Status in a Course +******************************************** + +.. autoclass:: enrollment.views.EnrollmentView + +**Example response showing the user's enrollment status in a course** + +.. code-block:: json + + HTTP 200 OK + Content-Type: application/json + Vary: Accept + Allow: GET, HEAD, OPTIONS + + { + "created": "2014-11-19T04:06:55Z", + "mode": "honor", + "is_active": true, + "course_details": { + "course_id": "edX/DemoX/Demo_Course", + "enrollment_end": null, + "course_modes": [ + { + "slug": "honor", + "name": "Honor Code Certificate", + "min_price": 0, + "suggested_prices": [], + "currency": "usd", + "expiration_datetime": null, + "description": null + } + ], + "enrollment_start": null, + "invite_only": false + }, + "user": "staff" + } + +.. _Get Enrollment Details for a Course: + +************************************ +Get Enrollment Details for a Course +************************************ + +.. autoclass:: enrollment.views.EnrollmentCourseDetailView + +**Example response showing a user's course enrollments** + +.. code-block:: json + + HTTP 200 OK + Content-Type: application/json + Vary: Accept + Allow: GET, HEAD, OPTIONS + + { + "course_id": "edX/DemoX/Demo_Course", + "enrollment_end": null, + "course_modes": [ + { + "slug": "honor", + "name": "Honor Code Certificate", + "min_price": 0, + "suggested_prices": [], + "currency": "usd", + "expiration_datetime": null, + "description": null + } + ], + "enrollment_start": null, + "invite_only": false + } + + +.. _View and add to a Users Course Enrollments: + +********************************************* +View and Add to a User's Course Enrollments +********************************************* + +.. autoclass:: enrollment.views.EnrollmentListView + + +**Example response showing a user's course enrollments** + +.. code-block:: json + + HTTP 200 OK + Content-Type: application/json + Vary: Accept + Allow: GET, POST, HEAD, OPTIONS + + [ + { + "created": "2014-09-19T18:08:37Z", + "mode": "honor", + "is_active": true, + "course_details": { + "course_id": "edX/DemoX/Demo_Course", + "enrollment_end": null, + "course_modes": [ + { + "slug": "honor", + "name": "Honor Code Certificate", + "min_price": 0, + "suggested_prices": [], + "currency": "usd", + "expiration_datetime": null, + "description": null + } + ], + "enrollment_start": null, + "invite_only": false + }, + "user": "honor" + }, + { + "created": "2014-09-19T18:09:35Z", + "mode": "honor", + "is_active": true, + "course_details": { + "course_id": "ArbisoftX/BulkyEmail101/2014-15", + "enrollment_end": null, + "course_modes": [ + { + "slug": "honor", + "name": "Honor Code Certificate", + "min_price": 0, + "suggested_prices": [], + "currency": "usd", + "expiration_datetime": null, + "description": null + } + ], + "enrollment_start": "2014-05-01T04:00:00Z", + "invite_only": false + }, + "user": "honor" + } + ] + + +**Example post request to enroll the user in a new course** + +.. code-block:: json + + { + “course_details”: { + “course_id”: “edX/DemoX/Demo_Course” + } + } \ No newline at end of file diff --git a/docs/en_us/platform_api/source/enrollment/index.rst b/docs/en_us/platform_api/source/enrollment/index.rst new file mode 100644 index 0000000000..2bf03fdb5c --- /dev/null +++ b/docs/en_us/platform_api/source/enrollment/index.rst @@ -0,0 +1,12 @@ +.. _edX Platform Enrollment API Version 1.0: + +######################################## +Enrollment API Version 1.0 +######################################## + +.. toctree:: + :maxdepth: 2 + + overview + endpoints + enrollment diff --git a/docs/en_us/platform_api/source/enrollment/overview.rst b/docs/en_us/platform_api/source/enrollment/overview.rst new file mode 100644 index 0000000000..742c50aaa1 --- /dev/null +++ b/docs/en_us/platform_api/source/enrollment/overview.rst @@ -0,0 +1,34 @@ +.. _edX Enrollment API Overview: + +################################################ +Enrollment API Overview +################################################ + +Use the Enrollment API to view user and course enrollment +information, and to enroll a user in a course. + +You can use the Enrollment API for web, desktop, and mobile +applications. + +**************************************** +Enrollment API Version 1.0 +**************************************** + +The Enrollment API is currently at version 1.0. We plan on making +significant enhancements to this API. + +******************************************** +Enrollment API Capabilities +******************************************** + +With the Enrollment API, you can complete these tasks. + +* :ref:`Get the user's enrollment status in a course ` + +* :ref:`Get enrollment details for a course` + +* :ref:`View a user's enrollments ` + +* :ref:`Enroll a user in a course ` diff --git a/docs/en_us/platform_api/source/index.rst b/docs/en_us/platform_api/source/index.rst index 33b3f583c0..2ff480c77e 100644 --- a/docs/en_us/platform_api/source/index.rst +++ b/docs/en_us/platform_api/source/index.rst @@ -1,15 +1,37 @@ -################################################ -edX Platform API Version 0.5 -################################################ +################## +EdX Platform APIs +################## + +.. toctree:: + :titlesonly: + + read_me + preface + change_log + +.. toctree:: + :maxdepth: 2 + + overview + authentication + +**************** +Supported APIs +**************** + +.. toctree:: + :maxdepth: 2 + + enrollment/index + mobile/index + +****************** +Experimental APIs +****************** .. toctree:: :maxdepth: 2 - read_me - preface - overview - authentication - endpoints - users - course_info - video_outlines + course_structure/index + user/index + diff --git a/docs/en_us/platform_api/source/course_info.rst b/docs/en_us/platform_api/source/mobile/course_info.rst similarity index 82% rename from docs/en_us/platform_api/source/course_info.rst rename to docs/en_us/platform_api/source/mobile/course_info.rst index 47c3d0c077..cd0af79f6e 100644 --- a/docs/en_us/platform_api/source/course_info.rst +++ b/docs/en_us/platform_api/source/mobile/course_info.rst @@ -1,10 +1,9 @@ ################################################## -Course Information API Module +Mobile Course Information API Module ################################################## -.. module:: mobile_api - -This page contains docstrings and example responses for: +This page describes how to use the Mobile Course Information API +to complete these actions: * `Get Course Updates`_ * `Get Course Handouts`_ @@ -17,28 +16,7 @@ This page contains docstrings and example responses for: Get Course Updates ******************* -.. .. autoclass:: course_info.views.CourseUpdatesList - -**Use Case** - -Get the content for course updates. - -**Example request**: - -``GET /api/mobile/v0.5/course_info/{organization}/{course_number}/{course_run}/updates`` - -**Response Values** - -A array of course updates. Each course update contains: - -* date: The date of the course update. - -* content: The content, as a string, of the course update. HTML tags are not - included in the string. - -* status: Whether the update is visible or not. - -* id: The unique identifier of the update. +.. autoclass:: mobile_api.course_info.views.CourseUpdatesList **Example response** @@ -71,7 +49,7 @@ A array of course updates. Each course update contains: Get Course Handouts ******************* -.. .. autoclass:: course_info.views.CourseHandoutsList +.. autoclass:: mobile_api.course_info.views.CourseHandoutsList **Use Case** @@ -107,20 +85,7 @@ Get the HTML for course handouts. Get the Course About Page ************************** -.. .. autoclass:: course_info.views.CourseAboutDetail -.. :members: - -**Use Case** - -Get the HTML for the course about page. - -**Example request**: - -``GET /api/mobile/v0.5/course_info/{organization}/{course_number}/{course_run}/about`` - -**Response Values** - -* overview: The HTML for the course About page. +.. autoclass:: mobile_api.course_info.views.CourseAboutDetail **Example response** diff --git a/docs/en_us/platform_api/source/endpoints.rst b/docs/en_us/platform_api/source/mobile/endpoints.rst similarity index 87% rename from docs/en_us/platform_api/source/endpoints.rst rename to docs/en_us/platform_api/source/mobile/endpoints.rst index eaccadb28d..5c878cb4c7 100644 --- a/docs/en_us/platform_api/source/endpoints.rst +++ b/docs/en_us/platform_api/source/mobile/endpoints.rst @@ -1,14 +1,14 @@ -.. _edX Platform API Endpoints: +.. _edX PlatformMobile API Endpoints: ################################################ -edX LMS Platform Endpoints +Mobile API Endpoints ################################################ -The edX Platform API allows you to view information about users and their course enrollments, course information, and videos and transcripts. +You use the Mobile API enables to view information about users and +their course enrollments, course information, and videos and transcripts. The following tasks and endpoints are currently supported. - .. list-table:: :widths: 10 70 :header-rows: 1 diff --git a/docs/en_us/platform_api/source/mobile/index.rst b/docs/en_us/platform_api/source/mobile/index.rst new file mode 100644 index 0000000000..ff4f8c8767 --- /dev/null +++ b/docs/en_us/platform_api/source/mobile/index.rst @@ -0,0 +1,14 @@ +.. _edX Platform Mobile API Version 0.5: + +##################################### +Mobile API Version 0.5 +##################################### + +.. toctree:: + :maxdepth: 2 + + overview + endpoints + users + course_info + video_outlines diff --git a/docs/en_us/platform_api/source/mobile/overview.rst b/docs/en_us/platform_api/source/mobile/overview.rst new file mode 100644 index 0000000000..845bd6a993 --- /dev/null +++ b/docs/en_us/platform_api/source/mobile/overview.rst @@ -0,0 +1,40 @@ +.. _edX Platform Mobile API Overview: + +################################################ +Mobile API Overview +################################################ + +Use the eMobile API to build mobile applications for students to +view course information and videos for courses on your instance of Open edX. + +****************************************** +Mobile API Version 0.5, Alpha +****************************************** + +The Mobile API is currently at version 0.5 and is an Alpha +release. We plan on making significant enhancements and changes to the API. + +.. caution:: + As this is a new and rapidly evolving API, at this time edX does not guarantee + forward compatibility. We encourage you to use and experiment with the API, + while keeping in mind that endpoints might change. + +************************************* +Mobile API Capabilities +************************************* + +With the Mobile API, you can complete these tasks. + +* Get :ref:`user details` and :ref:`course enrollments` for a user. + +* :ref:`Get or change user status in a course ` + +* Get :ref:`course information`, :ref:`updates`, and :ref:`handouts` for courses the + user is enrolled in. + +* Get :ref:`videos` and :ref:`transcripts` for courses the user is enrolled in. + \ No newline at end of file diff --git a/docs/en_us/platform_api/source/users.rst b/docs/en_us/platform_api/source/mobile/users.rst similarity index 54% rename from docs/en_us/platform_api/source/users.rst rename to docs/en_us/platform_api/source/mobile/users.rst index 97d5c0e8e7..fc2a7ddafe 100644 --- a/docs/en_us/platform_api/source/users.rst +++ b/docs/en_us/platform_api/source/mobile/users.rst @@ -1,10 +1,9 @@ -######################### -User API Module -######################### +#################################### +Mobile User API Module +#################################### -.. module:: mobile_api - -This page describes how to use the mobile user API to: +This page describes how to use the Mobile User API to complete +these actions: * `Get User Details`_ * `Get a User's Course Enrollments`_ @@ -16,35 +15,7 @@ This page describes how to use the mobile user API to: Get User Details ******************* -.. .. autoclass:: mobile_api.users.views.UserDetail -.. :members: - -**Use Case** - -Get information about the specified user and access other resources the user -has permissions for. - -Users are redirected to this endpoint after logging in. - -You can use the **course_enrollments** value in the response to get a list of -courses the user is enrolled in. - -**Example request** - -``GET /api/mobile/v0.5/users/{username}`` - -**Response Values** - -* id: The ID of the user. - -* username: The username of the currently logged in user. - -* email: The email address of the currently logged in user. - -* name: The full name of the currently logged in user. - -* course_enrollments: The URI to list the courses the currently logged in user - is enrolled in. +.. autoclass:: mobile_api.users.views.UserDetail **Example response** @@ -69,52 +40,7 @@ courses the user is enrolled in. Get a User's Course Enrollments ************************************** -.. .. autoclass:: users.views.UserCourseEnrollmentsList -.. :members: - -**Use Case** - -Get information about the courses the currently logged in user is enrolled in. - -**Example request**: - -``GET /api/mobile/v0.5/users/{username}/course_enrollments/`` - -**Response Values** - -* created: The date the course was created. - -* mode: The type of certificate registration for this course: honor or - certified. - -* is_active: Whether the course is currently active; true or false. - -* course: A collection of data about the course: - -* course_about: The URI to get the data for the course About page. - -* course_updates: The URI to get data for course updates. - -* number: The course number. - -* org: The organization that created the course. - -* video_outline: The URI to get the list of all vides the user can access in - the course. - -* id: The unique ID of the course. - -* latest_updates: Reserved for future use. - -* end: The end date of the course. - -* name: The name of the course. - -* course_handouts: The URI to get data for course handouts. - -* start: The data and time the course starts. - -* course_image: The path to the course image. +.. autoclass:: mobile_api.users.views.UserCourseEnrollmentsList **Example response** @@ -174,36 +100,7 @@ Get information about the courses the currently logged in user is enrolled in. Get or Change User Status in a Course ************************************** -.. .. autoclass:: mobile_api.users.views.UserCourseStatus -.. :members: - -**Use Case** - -Get or update the ID of the module that the specified user last visited in the -specified course. - -**Example request** - -``GET /api/mobile/v0.5/users/{username}/course_status_info/{course_id}`` - -.. code-block:: http - - PATCH /api/mobile/v0.5/users/{username}/course_status_info/{course_id} - body: - last_visited_module_id={module_id} - modification_date={date} - - The modification_date is optional. If it is present, the update will - only take effect if the modification_date is later than the - modification_date saved on the server. - -**Response Values** - -* last_visited_module_id: The ID of the last module visited by the user in the - course. - -* last_visited_module_path: The ID of the modules in the path from the last - visited module to the course module. +.. autoclass:: mobile_api.users.views.UserCourseStatus **Example Response** diff --git a/docs/en_us/platform_api/source/video_outlines.rst b/docs/en_us/platform_api/source/mobile/video_outlines.rst similarity index 51% rename from docs/en_us/platform_api/source/video_outlines.rst rename to docs/en_us/platform_api/source/mobile/video_outlines.rst index 4163662d47..1056a7af6d 100644 --- a/docs/en_us/platform_api/source/video_outlines.rst +++ b/docs/en_us/platform_api/source/mobile/video_outlines.rst @@ -1,10 +1,9 @@ ################################################## -Video Outlines API Module +Mobile Video Outlines API Module ################################################## -.. module:: mobile_api - -This page contains docstrings and example responses for: +This page describes how to use the Mobile Video Outlines API to +complete these actions: * `Get the Video List`_ * `Get a Video Transcript`_ @@ -15,57 +14,8 @@ This page contains docstrings and example responses for: Get the Video List ******************* -.. .. autoclass:: video_outlines.views.VideoSummaryList -.. :members: +.. autoclass:: mobile_api.video_outlines.views.VideoSummaryList -**Use Case** - -Get a list of all videos in the specified course. You can use the video_url -value to access the video file. - -**Example request**: - -``GET /api/mobile/v0.5/video_outlines/courses/{organization}/{course_number}/{course_run}`` - -**Response Values** - -An array of videos in the course. For each video: - -* section_url: The URL to the first page of the section that contains the video - in the Learning Managent System. - -* path: An array containing category and name values specifying the complete - path the the video in the courseware hierarcy. The following categories - values are included: "chapter", "sequential", and "vertical". The name value - is the display name for that object. - -* unit_url: The URL to the unit contains the video in the Learning Managent - System. - -* named_path: An array consisting of the display names of the courseware - objects in the path to the video. - -* summary: An array of data about the video that includes: - - * category: The type of component, in this case always "video". - - * video_thumbnail_url: The URL to the thumbnail image for the video, if - available. - - * language: The language code for the video. - - * name: The display name of the video. - - * video_url: The URL to the video file. Use this value to access the video. - - * duration: The length of the video, if available. - - * transcripts: An array of language codes and URLs to available video - transcripts. Use the URL value to access a transcript for the video. - - * id: The unique identifier for the video. - - * size: The size of the video file **Example response** @@ -120,16 +70,7 @@ An array of videos in the course. For each video: Get a Video Transcript *********************** -.. .. autoclass:: video_outlines.views.VideoTranscripts -.. :members: - -**Use Case** - -Use to get a transcript for a specified video and language. - -**Example request**: - -``/api/mobile/v0.5/video_outlines/transcripts/{organization}/{course_number}/{course_run}/{video ID}/{language code}`` +.. autoclass:: mobile_api.video_outlines.views.VideoTranscripts **Response Values** diff --git a/docs/en_us/platform_api/source/overview.rst b/docs/en_us/platform_api/source/overview.rst index 8caf35b932..57e96de243 100644 --- a/docs/en_us/platform_api/source/overview.rst +++ b/docs/en_us/platform_api/source/overview.rst @@ -1,46 +1,29 @@ -.. _edX Platform API Overview: - ################################################ -edX Platform API Overview +Overview of the edX Platform APIs ################################################ -The edX Platform API enables you to build applications for students to view -course information and videos for courses on your instance of Open edX. +The edX Platform APIs are a rapidly growing and evolving set of capabilities +that enable you to build web, desktop, and mobile applications that work with +your Open edX instance. -The edX Platform API uses Representational State Transfer (REST) design -principles and supports JavaScript Object Notation (JSON) data-interchange -format. Our REST API is simple, lightweight and optimized. +The edX Platform APIs use REST design principles and support the JSON data- +interchange format. -You can use the edX Platform API for web, desktop, and mobile applications. +********************************************** +Supported edX Platform API Modules +********************************************** + +The following edX Platform APIs are currently supported: + +* :ref:`edX Platform Enrollment API Version 1.0` +* :ref:`edX Platform Mobile API Version 0.5` -************************************* -edX Platform API Version 0.5, Alpha -************************************* +********************************************** +Experimental edX Platform API Modules +********************************************** -The edX Platform API is currently at version 0.5 and is an Alpha release. We -plan on making significant enhancements and changes to the API. +The following edX Platform APIs are currently experimental: -.. caution:: - As this is a new and rapidly evolving API, at this time edX does not guarantee - forward compatibility. We encourage you to use and experiment with the API, - while keeping in mind that endpoints may change. - -****************************** -edX Platform API Capabilities -****************************** - -With the edX Platform API, you can: - -* Get :ref:`user details` and :ref:`course enrollments` for a user. - -* :ref:`Get or change user status in a course ` - -* Get :ref:`course information`, :ref:`updates`, and :ref:`handouts` for courses the - user is enrolled in. - -* Get :ref:`videos` and :ref:`transcripts` for courses the user is enrolled in. \ No newline at end of file +* :ref:`EdX Platform Course Structure API Version 0` +* :ref:`edX Platform User API Version 0` diff --git a/docs/en_us/platform_api/source/user/accounts.rst b/docs/en_us/platform_api/source/user/accounts.rst new file mode 100644 index 0000000000..ff2756073a --- /dev/null +++ b/docs/en_us/platform_api/source/user/accounts.rst @@ -0,0 +1,39 @@ +################################################## +User Accounts API Module +################################################## + +This page contains information on using the User Accounts API to +complete these actions: + +* `Get and Update the User's Account Information`_ + +.. _Get and Update the User's Account Information: + +********************************************** +Get and Update the User's Account Information +********************************************** + +.. autoclass:: user_api.accounts.views.AccountView + +**Example response showing the user's account information** + +.. code-block:: json + + HTTP 200 OK + Content-Type: application/json + Vary: Accept + Allow: GET, HEAD, OPTIONS, PATCH + + { + "username": "John", + "name": "John Doe", + "language": "", + "gender": "m", + "year_of_birth": 2007, + "level_of_education": "m", + "goals": "Professional Development", + "country": US, + "mailing_address": "406 Highland Ave., Somerville, MA 02144", + "email": "johndoe@company.com", + "date_joined": "2015-03-18T13:42:40Z" + } diff --git a/docs/en_us/platform_api/source/user/endpoints.rst b/docs/en_us/platform_api/source/user/endpoints.rst new file mode 100644 index 0000000000..a050796366 --- /dev/null +++ b/docs/en_us/platform_api/source/user/endpoints.rst @@ -0,0 +1,22 @@ +################################################ +User API Endpoints +################################################ + +You use the User API to view information about users and update +your own account. + +The following tasks and endpoints are currently supported. + +.. list-table:: + :widths: 10 70 + :header-rows: 1 + + * - To: + - Use this endpoint: + * - :ref:`Get a user's account information ` + - GET /api/user/v0/accounts/{username}/[?view=shared] + * - :ref:`Update your account information ` + - PATCH /api/user/v0/accounts/{username}/{“key”:”value”} “application + /merge-patch+json” diff --git a/docs/en_us/platform_api/source/user/index.rst b/docs/en_us/platform_api/source/user/index.rst new file mode 100644 index 0000000000..aa05686237 --- /dev/null +++ b/docs/en_us/platform_api/source/user/index.rst @@ -0,0 +1,12 @@ +.. _edX Platform User API Version 0: + +################################# +User API Version 0 +################################# + +.. toctree:: + :maxdepth: 2 + + overview + endpoints + accounts diff --git a/docs/en_us/platform_api/source/user/overview.rst b/docs/en_us/platform_api/source/user/overview.rst new file mode 100644 index 0000000000..b02dbf5a8e --- /dev/null +++ b/docs/en_us/platform_api/source/user/overview.rst @@ -0,0 +1,29 @@ +################################################ +User API Overview +################################################ + +Use the User API to view and update account information. + +You can use the User API for web, desktop, and mobile +applications. + +************************************* +EdX Platform User API Version 0 +************************************* + +The User API is currently at version 0. We plan on making +significant enhancements to this API. + +.. caution:: + As this is a new and rapidly evolving API, at this time edX does not guarantee + forward compatibility. We encourage you to use and experiment with the API, + while keeping in mind that endpoints might change. + +********************************************** +User API Capabilities +********************************************** + +With the User API, you can complete these tasks. + +* :ref:`Get and update the users' account information ` diff --git a/docs/en_us/shared/images/Announcement_subscriptions.png b/docs/en_us/shared/images/Announcement_subscriptions.png new file mode 100644 index 0000000000000000000000000000000000000000..80a6c630239ebedad015ea7316947699849ef328 GIT binary patch literal 43413 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 literal 0 HcmV?d00001 diff --git a/docs/en_us/shared/preface.rst b/docs/en_us/shared/preface.rst index 350ed5a0c5..d6e22f04f3 100644 --- a/docs/en_us/shared/preface.rst +++ b/docs/en_us/shared/preface.rst @@ -1,11 +1,11 @@ .. _Preface: -.. Doc team! Be sure that when you make any changes to this file that you also make them to the mirrored file in the edx-analytics-dashboard/docs repository. - Alison 19 Aug 14 - ############ Preface ############ +.. Doc team! Be sure that when you make any changes to this file that you also make them to the mirrored file in the edx-analytics-dashboard/docs repository. - Alison 19 Aug 14 + Course teams, researchers, developers, students: the edX community includes groups with a range of reasons for using the platform and objectives to accomplish. To help members of each group learn about what edX offers, reach @@ -13,14 +13,83 @@ goals, and solve problems, edX provides a variety of information resources. To help you find what you need, browse the edX offerings in these categories: -* :ref:`Resources for Course Teams` -* :ref:`Resources for Researchers` -* :ref:`Resources for Developers` -* :ref:`Resources for Students` +* `The edX Partner Portal`_ +* `The Open edX Portal`_ +* `Release Announcements through the Open edX Portal`_ +* `Resources for Course Teams`_ +* `Resources for Researchers`_ +* `Resources for Developers`_ +* `Resources for Students`_ All members of the edX community are encouraged to make use of any of the resources described in this preface. +.. _The edX Partner Portal: + +*********************** +The edX Partner Portal +*********************** + +The `edX Partner Portal`_ is the destination for partners to learn, connect, +and collaborate with one another. Partners can explore rich resources and share +success stories and best practices while staying up-to-date with important news +and updates. + +To use the edX Partner Portal, you must register and request verification as an +edX partner. If you are an edX partner and have not used the edX Partner +Portal, follow these steps. + +#. Visit `partners.edx.org`_, and select **Create New Account**. +#. Select **Request Partner Access**, then fill in your personal details. +#. Select **Create New Account**. You will receive a confirmation email with + your account access within 24 hours. + +.. _The Open edX Portal: + +*********************** +The Open edX Portal +*********************** + +The `Open edX Portal`_ is the destination for all edX users to learn about the +edX roadmap, as well as hosting, extending the edX platform, and contributing +to Open edX. In addition, the Open edX Portal provides product announcements, +the Open edX blog, and other rich community resources. + +All users can view content on the Open edX Portal without creating an account +and logging in. + +To comment on blog posts or the edX roadmap, you must create an account and log +in. If you do not have an account, follow these steps. + +#. Visit `open.edx.org/user/register`_. +#. Fill in your personal details. +#. Select **Create New Account**. You are then logged in to the `Open edX + Portal`_. + +*************************************************** +Release Announcements through the Open edX Portal +*************************************************** + +To receive and share product and release announcements by email, subscribe to +announcements on the `Open edX Portal`_. + +#. Create an account on the `Open edX Portal`_ as described above. +#. Go to https://open.edx.org/announcements. +#. Under **Announcement Type** in the **Subscriptions** block, select the type + of announcements that you want to receive through email. + + .. image:: ../../shared/images/Announcement_subscriptions.png + :alt: Subscription block in the Open edX Portal Announcements page. + +4. Click **Save**. + +You will now receive email messages when new announcements of the types you +selected are posted. + +.. note:: + EdX partners can complete the same steps on the **Announcements** page in the + `edX Partner Portal`_. + *********************** System Status *********************** @@ -42,6 +111,14 @@ Course teams include faculty, instructional designers, course staff, discussion moderators, and others who contribute to the creation and delivery of courses on edx.org or edX Edge. +edX101: Overview of Creating a Course +------------------------------------- + +The `edX101`_ course was built in Studio and is available for enrollment on +edx.org. This course takes one to two hours to complete, and is designed to +provide a high-level overview of the course creation and delivery process. It +also highlights the extensive capabilities of the edX platform. + Documentation ------------- @@ -65,7 +142,9 @@ Documentation for course teams is available on the docs.edx.org web page. peer- and self- evaluations of responses to a question. Note that this new feature is in limited release. -* `edX Open Learning XML Guide`_ provides guidelines for building edX courses with Open Learning XML (OLX). Note that this guide is currently an Alpha version. +* `edX Open Learning XML Guide`_ provides guidelines for building edX courses + with Open Learning XML (OLX). Note that this guide is currently an alpha + version. These guides open in your web browser. The left side of each page includes a **Search docs** field and links to that guide's contents. To open or save a PDF @@ -83,11 +162,8 @@ To receive and share information by email, course team members can: * Join the `openedx-studio`_ Google group to ask questions and participate in discussions with peers at other edX partner organizations and edX staffers. -Wikis and Web Sites -------------------- - -The edX product team maintains the `Open edX Product`_ wiki, which includes the -`Open edX Public Product Roadmap`_. +Course Author Support +---------------------- The `edX Author Support`_ site hosts discussions that are monitored by edX staffers. @@ -145,17 +221,22 @@ Documentation for developers is available on the docs.edx.org web page. contributing to Open edX, options for extending the Open edX platform, using the edX public sandboxes, instrumenting analytics, and testing. -* `Installing, Configuring, and Running the edX Platform`_ provides procedures - for getting an edX developer stack (Devstack) and production stack - (Fullstack) oprerational. - * XBlock_: Open edX courseware components provides preliminary documentation on the XBlock component architecture for building courses. * `edX Open Learning XML Guide`_ provides guidelines for building edX courses - with Open Learning XML (OLX). Note that this guide is currently an Alpha + with Open Learning XML (OLX). Note that this guide is currently an alpha version. +* `edX Data Analytics API`_ provides tools for building applications to view + and analyze student activity in your course. + +* `edX Enrollment API`_ provides tools for building applications to view user + and course enrollment information, and to enroll users in courses. + +* `edX Platform API`_ provides tools for building applications to view course + information and videos. + GitHub ------- @@ -181,29 +262,49 @@ staffers. * For conversations about the code in Open edX, join `edx-code`_. * For conversations about running Open edX, join `openedx-ops`_. -* For conversations about globalization and translation, join `openedx-translation`_. +* For conversations about globalization and translation, + join `openedx-translation`_. Additional Google groups are occasionally formed for individual projects. -.. note:: Please do not report security issues in public. If you have a concern, please email security@edx.org. +.. note:: + Please do not report security issues in public. If you have a concern, + please email security@edx.org. EdX engineers often monitor the Freenode #edx-code IRC channel. -Wikis and Web Sites +Pull Requests ------------------- -The code.edx.org web site_ is an entry point for new contributors. - -The edX Engineering team maintains the `Open Source Home`_ wiki, which provides -insights into the plans, projects, and questions that the edX Open Source team -is working on with the community. - The pull request dashboard_ is a visualization of the count and age of the pull requests (PRs) assigned to teams at edX. Click the bars in this chart to get more information about the PRs. .. _Resources for Students: +.. _Resources for Open edX: + +************************** +Resources for Open edX +************************** + +Hosting providers, platform exenders, core contributors, and course staff all +use Open edX. Starting with the Birch release of Open edX, the following +release-specific documentation is available on docs.edx.org. + +* `Open edX Release Notes`_ provides information on changes in Open edX + releases. + +* `Installing, Configuring, and Running the edX Platform`_ provides procedures + for getting Devstack and Fullstack installed and operational. + +* `Building and Running an Open edX Course`_ is a comprehensive guide with + concepts and procedures to help you build a course in Studio, and then + use the Learning Management System (LMS) to run a course. + + When you are working in Studio, you can access relevant sections of this + guide by clicking **Help** on any page. + ************************** Resources for Students ************************** @@ -211,11 +312,10 @@ Resources for Students Documentation ------------- -The `edX Guide for Students`_ is available on the docs.edx.org web page. As -students are not currently guided to this resource through the coursware, we -encourage course staff to provide links to students as needed in course updates -or discussions. Note that this guide is currently an Alpha version. - +The `edX Guide for Students`_ is available on the docs.edx.org web page. +Because students are not currently guided to this resource through the +courseware, we encourage course staff to provide links to students as needed +in course updates or discussions. In a Course ------------ @@ -225,13 +325,13 @@ interact with other students and with the course team: click **Discussion**. Many courses also offer a wiki for additional resources and materials: click **Wiki**. -Other resources may also be available, such as a course-specific facebook page -or twitter feed or opportunites for Google hangouts. Be sure to check the -**Course Info** page for your course as well as the **Discussion** and **Wiki** -pages. +Other resources might also be available, such as a course-specific Facebook +page or Twitter feed, or opportunities for Google Hangouts. Be sure to check +the **Course Info** page for your course as well as the **Discussion** and +**Wiki** pages. -From time to time, the course team may send email messages to all students. -While you can opt out of these messages, doing so means that you may miss +From time to time, the course team might send email messages to all students. +While you can opt out of these messages, doing so means that you can miss important or time-sensitive information. To change your preferences for course email, click **edX** or **edX edge** at the top of any page. On your dashboard of current courses, locate the course and then click **Email Settings**. @@ -285,3 +385,13 @@ edX Global Community meetup_ group. .. _openedx-ops: http://groups.google.com/forum/#!forum/openedx-ops .. _openedx-translation: http://groups.google.com/forum/#!forum/openedx-translation .. _edx-code: http://groups.google.com/forum/#!forum/edx-code +.. _edx101: https://www.edx.org/course/overview-creating-edx-course-edx-edx101#.VIIJbWTF_yM +.. _edX Data Analytics API: http://edx.readthedocs.org/projects/edx-data-analytics-api/en/latest/index.html +.. _edX Enrollment API: http://edx.readthedocs.org/projects/edx-enrollment-api/en/latest/ +.. _edX Platform API: http://edx.readthedocs.org/projects/edx-platform-api/en/latest/ +.. _edX Partner Portal: https://partners.edx.org +.. _partners.edx.org: https://partners.edx.org +.. _Open edX Portal: https://open.edx.org +.. _open.edx.org/user/register: https://open.edx.org/user/register +.. _Open edX Release Notes: http://edx.readthedocs.org/projects/open-edx-release-notes/en/latest/ +.. _Building and Running an Open edX Course: http://edx.readthedocs.org/projects/open-edx-building-and-running-a-course/en/named-release-birch/ \ No newline at end of file diff --git a/lms/djangoapps/course_structure_api/v0/views.py b/lms/djangoapps/course_structure_api/v0/views.py index ef358daa7a..d238f7b250 100644 --- a/lms/djangoapps/course_structure_api/v0/views.py +++ b/lms/djangoapps/course_structure_api/v0/views.py @@ -77,34 +77,52 @@ class CourseList(CourseViewMixin, ListAPIView): """ **Use Case** - CourseList returns paginated list of courses in the edX Platform. The list can be filtered by course_id. + Get a paginated list of courses in the edX Platform. - **Example Request** + The list can be filtered by course_id. + + Each page in the list can contain up to 10 courses. + + **Example Requests** GET /api/course_structure/v0/courses/ + GET /api/course_structure/v0/courses/?course_id={course_id1},{course_id2} **Response Values** - * id: The unique identifier for the course. + * count: The number of courses in the edX platform. - * name: The name of the course. + * next: The URI to the next page of courses. - * category: The type of content. In this case, the value is always "course". + * previous: The URI to the previous page of courses. - * org: The organization specified for the course. + * num_pages: The number of pages listing courses. - * course: The course number. + * results: A list of courses returned. Each collection in the list + contains these fields. - * org: The run for the course. + * id: The unique identifier for the course. - * uri: The URI to use to get details of the course. + * name: The name of the course. - * image_url: The URI for the course's main image. + * category: The type of content. In this case, the value is always + "course". - * start: Course start date + * org: The organization specified for the course. - * end: Course end date + * run: The run of the course. + + * course: The course number. + + * uri: The URI to use to get details of the course. + + * image_url: The URI for the course's main image. + + * start: The course start date. + + * end: The course end date. If course end date is not specified, the + value is null. """ paginate_by = 10 paginate_by_param = 'page_size' @@ -138,27 +156,34 @@ class CourseDetail(CourseViewMixin, RetrieveAPIView): """ **Use Case** - CourseDetail returns details for a course. + Get details for a specific course. - **Example requests**: + **Example Request**: GET /api/course_structure/v0/courses/{course_id}/ **Response Values** - * category: The type of content. - + * id: The unique identifier for the course. + * name: The name of the course. - * uri: The URI to use to get details of the course. + * category: The type of content. + + * org: The organization that is offering the course. + + * run: The run of the course. * course: The course number. - * due: The due date. For courses, the value is always null. + * uri: The URI to use to get details about the course. - * org: The organization specified for the course. + * image_url: The URI for the course's main image. - * id: The unique identifier for the course. + * start: The course start date. + + * end: The course end date. If course end date is not specified, the + value is null. """ serializer_class = serializers.CourseSerializer @@ -171,7 +196,8 @@ class CourseStructure(CourseViewMixin, RetrieveAPIView): """ **Use Case** - Retrieves course structure. + Get the course structure. This endpoint returns all blocks in the + course. **Example requests**: @@ -179,9 +205,27 @@ class CourseStructure(CourseViewMixin, RetrieveAPIView): **Response Values** - * root: ID of the root node of the structure + * root: The ID of the root node of the course structure. - * blocks: Dictionary mapping IDs to block nodes. + * blocks: A dictionary that maps block IDs to a collection of + information about each block. Each block contains the following + fields. + + * id: The ID of the block. + + * type: The type of block. Possible values include sequential, + vertical, html, problem, video, and discussion. The type can also be + the name of a custom type of block used for the course. + + * display_name: The display name configured for the block. + + * graded: Whether or not the sequential or problem is graded. The + value is true or false. + + * format: The assignment type. + + * children: If the block has child blocks, a list of IDs of the child + blocks. """ serializer_class = serializers.CourseStructureSerializer course = None @@ -205,7 +249,7 @@ class CourseGradingPolicy(CourseViewMixin, ListAPIView): """ **Use Case** - Retrieves course grading policy. + Get the course grading policy. **Example requests**: @@ -213,14 +257,16 @@ class CourseGradingPolicy(CourseViewMixin, ListAPIView): **Response Values** - * assignment_type: The type of the assignment (e.g. Exam, Homework). Note: These values are course-dependent. - Do not make any assumptions based on assignment type. + * assignment_type: The type of the assignment, as configured by course + staff. For example, course staff might make the assignment types Homework, + Quiz, and Exam. - * count: Number of assignments of the type. + * count: The number of assignments of the type. * dropped: Number of assignments of the type that are dropped. - * weight: Effect of the assignment type on grading. + * weight: The weight, or effect, of the assignment type on the learner's + final grade. """ serializer_class = serializers.GradingPolicySerializer diff --git a/openedx/core/djangoapps/user_api/accounts/views.py b/openedx/core/djangoapps/user_api/accounts/views.py index 8d3fc0e9a4..b76a163517 100644 --- a/openedx/core/djangoapps/user_api/accounts/views.py +++ b/openedx/core/djangoapps/user_api/accounts/views.py @@ -20,79 +20,97 @@ class AccountView(APIView): """ **Use Cases** - Get or update the user's account information. Updates are only supported through merge patch. + Get or update a user's account information. Updates are supported only through merge patch. **Example Requests**: GET /api/user/v0/accounts/{username}/[?view=shared] - PATCH /api/user/v0/accounts/{username}/ with content_type "application/merge-patch+json" + PATCH /api/user/v0/accounts/{username}/{"key":"value"} "application/merge-patch+json" **Response Values for GET** - If the user making the request has username "username", or has "is_staff" access, the following - fields will be returned: + If the user makes the request for her own account, or makes a + request for another account and has "is_staff" access, the response + contains: - * username: username associated with the account (not editable) + * username: The username associated with the account. - * name: full name of the user (must be at least two characters) + * name: The full name of the user. - * email: email for the user (the new email address must be confirmed via a confirmation email, so GET will - not reflect the change until the address has been confirmed) + * email: The confirmed email address for the user. The request + will not return an unconfirmed email address. - * date_joined: date this account was created (not editable), in the string format provided by - datetime (for example, "2014-08-26T17:52:11Z") + * date_joined: The date the account was created, in + the string format provided by datetime (for example, + "2014-08-26T17:52:11Z"). - * gender: null (not set), "m", "f", or "o" + * gender: One of the fullowing values: - * year_of_birth: null or integer year + * "m" + * "f" + * "o" + * null - * level_of_education: null (not set), or one of the following choices: + * year_of_birth: The year the user was born, as an integer, or + null. - * "p" signifying "Doctorate" - * "m" signifying "Master's or professional degree" - * "b" signifying "Bachelor's degree" - * "a" signifying "Associate degree" - * "hs" signifying "Secondary/high school" - * "jhs" signifying "Junior secondary/junior high/middle school" - * "el" signifying "Elementary/primary school" - * "none" signifying "None" - * "o" signifying "Other" + * level_of_education: One of the following values: - * language: null or name of preferred language + * "p": PhD or Doctorate + * "m": Master's or professional degree + * "b": Bachelor's degree + * "a": Associate's degree + * "hs": Secondary/high school + * "jhs": Junior secondary/junior high/middle school + * "el": Elementary/primary school + * "none": "None" + * "o": "Other" + * null: The user did not enter a value. - * country: null (not set), or a Country corresponding to one of the ISO 3166-1 countries + * language: The user's preferred language, or null. - * mailing_address: null or textual representation of mailing address + * country: A ISO 3166 country code or null. - * goals: null or textual representation of goals + * mailing_address: The textual representation of the user's + mailing address, or null. - If a user without "is_staff" access has requested account information for a different user, - only a subset of these fields will be returned. The actual fields returned depend on the configuration - setting ACCOUNT_VISIBILITY_CONFIGURATION, and the visibility preference of the user with username - "username". + * goals: The textual representation of the user's goals, or null. - Note that a user can view which account fields they have shared with other users by requesting their - own username and providing the url parameter "view=shared". + If a user who does not have "is_staff" access requests account + information for a different user, only a subset of these fields is + returned. The fields returned depend on the configuration setting + ACCOUNT_VISIBILITY_CONFIGURATION, and the visibility preference of + the user for whom data is requested. - This method will return a 404 if no user exists with username "username". + Note that a user can view which account fields they have shared with + other users by requesting their own username and providing the url + parameter "view=shared". - **Response for PATCH** + If no user exists with the specified username, a 404 error is + returned. - Users can only modify their own account information. If the requesting user does not have username - "username", this method will return with a status of 404. + **Response Values for PATCH** - This method will also return a 404 if no user exists with username "username". + Users can modify only their own account information. If the user + attempts to modify another user's account, a 404 error is returned. - If "application/merge-patch+json" is not the specified content_type, this method returns a 415 status. + If no user exists with the specified username, a 404 error is + returned. - If the update could not be completed due to validation errors, this method returns a 400 with all - field-specific error messages in the "field_errors" field of the returned JSON. + If "application/merge-patch+json" is not the specified content type, + a 415 error is returned. - If the update could not be completed due to failure at the time of update, this method returns a 400 with - specific errors in the returned JSON. + If the update could not be completed due to validation errors, this + method returns a 400 error with all error messages in the + "field_errors" field of the returned JSON. - If the update is successful, a 204 status is returned with no additional content. + If the update could not be completed due to a failure at the time of + the update, a 400 error is returned with specific errors in the + returned JSON collection. + + If the update is successful, a 204 status is returned with no + additional content. """ authentication_classes = (OAuth2AuthenticationAllowInactiveUser, SessionAuthenticationAllowInactiveUser) permission_classes = (permissions.IsAuthenticated,)