networkfs API доступно по адресу http://nerc.itmo.ru/teaching/os/networkfs/.
Все запросы осуществляются по методу GET. Аргументы передаются в GET-параметрах.
Путь составляется следующим образом: API_URL / :version / :token / :method. Пример: http://nerc.itmo.ru/teaching/os/networkfs/v1/12345678/fs/read?inode=1234.
Токен пропускается в методе token.issue. В названии метода точки заменяются на слеши.
Система поддерживает два типа ответов.
binary — возвращает представление, которое можно скастить в структуру следующего типа на 64-битной системе (по умолчанию):struct result {
u64 status;
response_type response;
}
json — JSON-объект:{
"status": 0,
"response": ...
}
Чтобы получить JSON-объект, нужно передать параметр json (с любым значением или без него) или заголовок Accept: application/json. Пример: http://nerc.itmo.ru/teaching/os/networkfs/v1/12345678/fs/list?inode=12345.
В случае ненулевого кода ошибки (status) ответ не возвращается.
Коды ошибок:
token.issueВыдаёт новый токен. В новой файловой системе есть несколько файлов для примера.
Авторизация не требуется.
Пример запроса: http://nerc.itmo.ru/teaching/os/networkfs/v1/token/issue?json
Возвращаемое значение:
char token[16];
Возможные коды ошибок: 0.
fs.listВозвращает информацию о директории.
Аргументы:
inode — номер inodeВозвращаемое значение:
struct entries {
size_t entries_count;
struct entry {
unsigned char entry_type; // DT_DIR (4) or DT_REG (8)
ino_t ino;
char name[256];
} entries[16];
}
Возможные коды ошибок: 0, 1, 3.
fs.createСоздаёт новый объект.
Аргументы:
parent — номер родительской inodename — название директорииtype — тип создаваемого объекта: directory или fileВозвращаемое значение:
ino_t ino;
Возможные коды ошибок: 0, 1, 3, 5, 7.
fs.readЧитает содержимое файла.
Аргументы:
inode — номер inodeВозвращаемое значение:
struct content {
u64 content_length;
char content[content_length];
};
Возможные коды ошибок: 0, 1, 2.
fs.writeЗаписывает данные в файл.
Аргументы:
inode — номер inodecontent — содержимое файлаВозвращается только код ошибки.
Возможные коды ошибок: 0, 1, 2, 6.
fs.linkСоздаёт жёсткую ссылку.
Аргументы:
source — номер inode, на которую нужно сослатьсяparent — номер родительской директорииname — название ссылкиВозвращается только код ошибки.
Возможные коды ошибок: 0, 1, 2, 3, 5, 7.
Примечания:
source не является файлом, ошибка 3 — если parent не является директорией.fs.unlinkУдаляет файл. Если на данную inode больше никто не ссылается, она также удаляется.
Аргументы:
parent — номер родительской директорииname — название файлаВозвращается только код ошибки.
Возможные коды ошибок: 0, 1, 2, 3, 4.
fs.rmdirУдаляет пустую директорию.
Аргументы:
parent — номер родительской директорииname — название директорииВозвращается только код ошибки.
Возможные коды ошибок: 0, 1, 3, 4, 8.
fs.lookupВозвращает информацию об объекте.
Аргументы:
parent — номер родительской директорииname — название объекта.Возвращаемое значение:
struct entry_info {
unsigned char entry_type; // DT_DIR (4) or DT_REG (8)
ino_t ino;
};
Возможные коды ошибок: 0, 1, 3, 4.