Методы:
#region Основные
/// <summary>
/// Вход/Авторизация.
/// </summary>
/// <param name="userName">Имя.</param>
/// <param name="password">Пароль.</param>
/// <returns></returns>
[AcceptVerbs("POST")]
public HttpStatus Login(string userName, string password)
{
Если на сервисе включена Forms авторизация, то
для вызова защищенных атрибутом [ApiAccess] методов, необходимо пройти процедуру авторизации.
При удачной проверке имени пользователя и пароля, возвращается зашифрованная кука, которая должна
в последующем передаваться на сервер при каждом вызове защищенного метода сервиса.
Если проверка не прошла, возвращается статус (403) Forbidden.
Так же поддерживается Basic авторизация, при которой параметры авторизации передаются с каждым запросом
в заголовке Authorization в формате «Basic userName:password», где строка userName:password закодирована в Base64.
Если проверка не прошла, то возвращается статус (401) Unauthorized.
}
/// <summary>
/// Выход.
/// </summary>
[AcceptVerbs("GET","POST")]
public void Logout()
{
Удаляется кука авторизации.
}
/// <summary>
/// Дата/Время на сервере.
/// </summary>
/// <returns>Content-Type: application/json</returns>
[AcceptVerbs("GET", "POST")]
public DateTime GetServerDateTime()
{
Возвращается Дата/Время сервера в ISO формате.
}
/// <summary>
/// Версия сервиса.
/// </summary>
/// <returns>Content-Type: application/json</returns>
[AcceptVerbs("GET", "POST")]
public string GetServiceVersion()
{ }
/// <summary>
/// Начать процесс обновления.
/// </summary>
/// <param name="appName">Имя приложения.</param>
/// <param name="version">Версия.</param>
[AcceptVerbs("POST")]
[ApiAccess]
public void UpdateBegin(string appName, string version)
{ }
/// <summary>
/// Окончить процесс обновления.
/// </summary>
/// <param name="appName">Имя приложения.</param>
/// <param name="version">Версия.</param>
[AcceptVerbs("POST")]
[ApiAccess]
public void UpdateEnd(string appName, string version)
{ }
#endregion
#region Application
/// <summary>
/// Список приложений.
/// </summary>
/// <returns>Content-Type: application/json</returns>
[AcceptVerbs("GET", "POST")]
[ApiAccess]
public List<string> GetAppNames()
{ }
/// <summary>
/// Подробный список приложений.
/// </summary>
/// <returns>Content-Type: application/json</returns>
[AcceptVerbs("GET", "POST")]
[ApiAccess]
public List<AppInfo> GetApplications()
{ }
/// <summary>
/// Информация о приложении.
/// </summary>
/// <param name="appName">Имя приложения.</param>
/// <returns>Content-Type: application/json</returns>
[AcceptVerbs("GET", "POST")]
[ApiAccess]
public AppInfo GetAppInfo(string appName)
{ }
/// <summary>
/// Получить иконку приложения.
/// </summary>
/// <param name="appName">Имя приложения.</param>
/// <returns>Content-Type: image/???</returns>
[AcceptVerbs("GET", "POST")]
[ApiAccess]
public Stream GetAppImage(string appName)
{ }
#endregion
#region Version
/// <summary>
/// Список версий.
/// </summary>
/// <param name="appName">Имя приложения.</param>
/// <returns>Content-Type: application/json</returns>
[AcceptVerbs("GET", "POST")]
[ApiAccess]
public List<string> GetVersionNames(string appName)
{ }
/// <summary>
/// Подробный список версий.
/// </summary>
/// <param name="appName">Имя приложения.</param>
/// <returns>Content-Type: application/json</returns>
[AcceptVerbs("GET", "POST")]
[ApiAccess]
public List<AppVersionInfo> GetVersions(string appName)
{ }
/// <summary>
/// Информация о версии.
/// </summary>
/// <param name="appName">Имя приложения.</param>
/// <param name="version">Версия.</param>
/// <returns>Content-Type: application/json</returns>
[AcceptVerbs("GET", "POST")]
[ApiAccess]
public AppVersionInfo GetVersionInfo(string appName, string version)
{ }
/// <summary>
/// Скачать архив с файлами версии.
/// </summary>
/// <param name="appName">Имя приложения.</param>
/// <param name="version">Версия.</param>
/// <returns>Content-Type: application/zip</returns>
[AcceptVerbs("GET", "POST")]
[ApiAccess]
public Stream DownloadVersion (string appName, string version)
{ }
#endregion
#region File
/// <summary>
/// Список файлов.
/// </summary>
/// <param name="appName">Имя приложения.</param>
/// <param name="version">Версия.</param>
/// <returns>Content-Type: application/json</returns>
[AcceptVerbs("GET", "POST")]
[ApiAccess]
public List<string> GetFileNames(string appName, string version)
{ }
/// <summary>
/// Подробный список файлов.
/// </summary>
/// <param name="appName">Имя приложения.</param>
/// <param name="version">Версия.</param>
/// <param name="calcChecksum">Вычислить контрольную сумму.</param>
/// <returns>Content-Type: application/json</returns>
[AcceptVerbs("GET", "POST")]
[ApiAccess]
public List<AppFileInfo> GetFiles(string appName, string version, bool? calcChecksum)
{ }
/// <summary>
/// Информация о файле.
/// </summary>
/// <param name="appName">Имя приложения.</param>
/// <param name="version">Версия.</param>
/// <param name="fileName">Имя файла.</param>
/// <param name="calcChecksum">Вычислить контрольную сумму.</param>
/// <returns>Content-Type: application/json</returns>
[AcceptVerbs("GET", "POST")]
[ApiAccess]
public AppFileInfo GetFileInfo(string appName, string version, string fileName, bool? calcChecksum)
{ }
/// <summary>
/// Скачать файл.
/// </summary>
/// <param name="appName">Имя приложения.</param>
/// <param name="version">Версия.</param>
/// <param name="fileName">Имя файла.</param>
/// <param name="zip">Сжимать файл при загрузке.</param>
/// <returns>Content-Type: application/octet-stream</returns>
[AcceptVerbs("GET", "POST")]
[ApiAccess]
public Stream DownloadFile(string appName, string version, string fileName, bool? zip)
{
Сжимать или не сжимать файл определяется параметром запроса "zip".
Если он не передан (равен null), то сжатие определяется заголовком запроса "Accept-Encoding".
Если он содержит значение "gzip", то файл сжимается.
}
#endregion
Структуры данных:
// "Информация о приложении"
class AppInfo
{
string AppName; // Имя приложения
List<AppVersionInfo> Versions; // Список версий
}
// "Информация о версии"
class AppVersionInfo
{
string Version; // Версия
int FilesCount; // Кол-во файлов
long TotalSize; // Размер всех файлов
}
// "Информация о файле"
class AppFileInfo
{
string RelativeName; // Относительное имя
string Version; // Версия
string Checksum; // Контрольная сумма
string Attributes; // Атрибуты
long Size; // Размер
DateTime LastWriteTime; // Время последней модификации
}