README
UW Student Web Service
This implements most of the v5 UW Student Webservice endpoints. Each endpoint is queried using convenient options to build the final request
.
This module assumes you have gone through all the required steps to get access and verified that access as documented in the SWS wiki.
Note: Version 7.0.0 and later require Node 8
USE
Installation
npm install uwsws
Examples
Import the module and set it's configuration. You must set a cacheMode
to tell the module to handle http request responses. Responses can be cached to the filesystem (useful for development). In development, set cacheMode
to record
. In production, set cacheMode
to wild
to force all requests to go over the internet.
let uwsws = require('uwsws');
// With x509 cert
let config = {
baseUrl: 'https://ws.admin.washington.edu/student/v5/',
cacheExt: '.json',
cacheMode: 'wild',
cachePath: '/path/to/a/cache/directory/',
certInfo: {
file: {
cert: 'PATH TO LOCAL CERT',
key: 'PATH TO LOCAL KEY'
},
// s3: {
// certBucket: 'CERT AWS BUCKET',
// certKey: 'CERT AWS KEY',
// keyBucket: 'KEY AWS BUCKET',
// keyKey: 'KEY AWS KEY'
// }
},
logLevel: process.env.LOG_LEVEL || 'info',
};
// or....with Authentication Token
let config = {
baseUrl: 'https://ws.admin.washington.edu/student/v5/',
cacheMode: 'wild',
cachePath: '/path/to/a/cache/directory/',
logLevel: process.env.LOG_LEVEL || 'info',
token: 'Your Auth Token'
};
await uwsws.initialize(config);
uwsws.term.current()
.then((result) => {
console.log(result.term)
});
Using the same config, get the intro to programming course for winter 2015.
let options = {
year: 2015,
quarter: 'winter',
curriculum: 'cse',
course: '142'
};
uwsws.course.get(options)
.then((result) => {
expect(result.course.CourseNumber).to.equal('142');
});
For more examples see test/unit/*
. For a full list of all the options see src/modules/*
. Right now there isn't 100% coverage of all the options, but, in theory, they should work in the context of the query string parameters described in the SWS documentation. If you find one that doesn't work please create an issue.
Using a local cache
The cacheMode
can be set to any one of the following modes. This uses the micro-cache
node module as a local file system cache.
- wild: all requests go out to the internet, don't load anything from cache, doesn't save anything.
- dryrun: Loads files from cache if exists, does http calls when cache doesn't exist, doesn't save to the cache.
- record: Loads files from the cache and saves new ones to the cache.
Logging
This module uses the log4js
logging api, but does not include log4js itself. If you use log4js in your consuming app, it will utilize its log4js library and configuration with a logger name of `node-uwsws'.
Endpoint Implementation
All links below go to the official service documentation. The code block refers to it's implementation in this module.
Fully Supported
All of the uwsws
methods return a promise for a result object that contains the following elements:
Object Element | Meaning |
---|---|
statusCode |
This element represents the HTTP statusCode of the API response. |
data |
This element represents the data returned by the SWS API. This element is empty if the request HTTP response code was not 200. |
message |
This element represents the message returned in the body of non-200 HTTP response codes. A message is not returned if the status code is 200. |
In most methods, the response body is returned in data element. However, where it makes sense, some of the original body is removed to provide cleaner access to only the data you need.
All of the option
parameters are outlined in sr/modules/[endpoint]
Endpoint | Implementation |
---|---|
Campus | uwsws.campus.all() |
College Search | uwsws.college.search(campusName) |
Course | uwsws.course.get(options) |
Course Search | uwsws.course.search(options) |
Curriculum Search | uwsws.curriculum.search(options) |
Department Search | uwsws.department.search(options) |
Enrollment | uwsws.enrollment.get(options) |
Enrollment Search | uwsws.enrollment.search(options) |
Major | uwsws.major.search(options) |
Person | uwsws.person.get(regid) |
Person Search | uwsws.person.search(options) |
Registration Search | uwsws.registration.search(options) |
Section | uwsws.section.get(options) |
Section Search | uwsws.section.search(options) |
Term | uwsws.term.next() or .previous() , or .current() as well as uwsws.term.search(options) |
Test Score | uwsws.testScore(options) |
Not Implemented
Most of these are not implemented due to additional security requirements beyond a simple 509 cert. Requirements such as permissions in ASTRA or x-uw-act-as permissions passed in the header. Feel free fork and make a pull request with working tests if you have those permissions. Others are simply planned for a future release.
extra security needed
not needed
Development
Copy test/setup/config-sample.js
to test/setup/config.js
and edit values as needed. Use the npm
commands indicated in package.json
.
npm test