Евгений Колесников %!s(int64=4) %!d(string=hai) anos
pai
achega
337b27ba37
Modificáronse 2 ficheiros con 183 adicións e 4 borrados
  1. 169 0
      articles/android_auth.md
  2. 14 4
      readme.md

+ 169 - 0
articles/android_auth.md

@@ -0,0 +1,169 @@
+# Проект "база". Авторизация на сервере (Basic auth, token).
+
+## API
+
+Приведу пример описания API, которое было на моём демо-экзамене:
+
+>API  доступно по адресу http://car.areas.su/
+>Для работы с API метод принимает в теле application/json
+>Например:
+>Метод входа. Ссылка http://cars.areas.su/login
+>
+>Request Body(application/json)
+>```json
+>{
+>	"username":"serk",
+>	"password":"123"
+>}
+>```
+>
+>Response
+>
+>```json
+>{
+>   "notice": 
+>   {
+>       "token":111520
+>   }
+>}
+>```
+>
+>1 **/login** – метод для получения ключа для входа
+>   - Используется метод POST
+>   - Формат запроса JSON
+>   - Принимает два ключа username и password
+>   - ответ в формате JSON
+>
+>2 **/logout** – метод обнуления действия token
+>   - Используется метод POST
+>   - Формат запроса JSON
+>   - Принимает ключ  username
+>
+>3 **/signup** – метод регистрации нового пользователя
+>   - Используется метод POST
+>   - Формат запроса JSON
+>	- Принимает ключ  username, email, password
+>
+>4 **/cars** – метод для получения свободных автомобилей
+>   - Используется метод GET
+>   - Формат ответа JSON
+>
+>5 **/history** – метод для получения истории вождения
+>   - Используется метод POST
+>   - Формат запроса JSON
+>   - **Принимает ключ  token**
+>   - Формат ответа JSON
+
+Несколько косноязычно и не расписаны "подводные камни". Логика авторизации такая, что если токен уже получен, то новый не выдается - нужно сначала разлогиниться.
+
+Методы есть как публичные (**/cars**), так и требующие авторизации (**/history** - это видно по тому, что в параметрах требуется токен).
+
+Я на примере этого разработал АПИ для ваших баз:
+
+1. Создаем файл `api.http`:
+
+    >Примеры запросов реализованы в формате плагина **REST Client** для Visual Studio Code
+
+    Прописываем в нем URL сервера:
+
+    ```
+    @url=http://s4a.kolei.ru
+    ```
+
+2. Проверить работоспособность можно послав запрос **/about**:
+
+    ```
+    GET {{url}}/about
+    ```
+
+3. Для авторизации нужно послать **POST** запрос **/login** в формате `application/json` с параметрами *username* и *password* (соответственно логин и пароль к ВАШЕЙ базе MySQL)
+
+    ```
+    ### логин
+    # @name login
+    POST {{url}}/login
+    Content-Type: application/json
+
+    {
+        "username": "esmirnov",
+        "password": "111103"
+    }
+
+    ###
+    @token={{login.response.body.$.notice.token}}
+    ```
+
+    Тут встречаются средства автоматизации **REST Client**-а:
+
+    * `# @name login` этой командой мы присваиваем имя текущему запросу
+    * `@token={{login.response.body.$.notice.token}}` а здесь, используя ответ команды достаём токен. Таким образом для последующих команд не надо выписывать на бумажке токен и править запросы.
+
+    При успешном ответе придет токен авторизации:
+
+    ```json
+    {
+        "notice": {
+            "token": 2200743
+        }
+    }
+    ```
+
+    При ошибке текст ошибки в поле *answer*:
+
+    ```json
+    {
+        "notice": {
+            "answer": "Пользователь уже авторизован, используйте токен или перелогиньтесь"
+        }
+    }
+    ```
+
+    То есть при получении ответа вы должны разобрать полученный JSON, если есть токен, то можно продолжать работать. Если ошибка, то показать **Alert** с ошибкой и остаться на экране авторизации.
+
+4. Для выхода нужно послать **POST** запрос **/logout** c параметом *username*:
+ 
+    ```
+    POST {{url}}/logout
+    Content-Type: application/json
+
+    {   
+        "username": "esmirnov"
+    }
+    ```
+
+5. Для запроса данных из базы нужно послать **GET** запрос с названием таблицы. В заголовке запроса передать токен полученный при авторизации (я сначала сделал передачу токена в заголовке, а только потом увидел, что надо было передавать в теле запроса).
+
+    ```
+    GET {{url}}/Product
+    Content-Type: application/json
+    Token: {{token}}
+    ```
+
+    В ответ должны получить содержимое таблицы:
+
+    ```json
+    {
+        "notice": {
+            "data": [
+                {
+                    "ID": 1,
+                    "Title": "Колесо R18 Кованый",
+                    "ProductTypeID": 128,
+                    "ArticleNumber": "241659",
+                    "Description": null,
+                    "Image": "\\products\\tire_15.jpg",
+                    "ProductionPersonCount": 4,
+                    "ProductionWorkshopNumber": 10,
+                    "MinCostForAgent": 11509
+                },
+                ...
+            ]
+        }
+    }
+    ```
+
+6. Для получения изображений нужно выделить его название из поля *Image* и сформировать **GET** запрос:
+
+    ```
+    GET {{url}}/img/tire_0.jpg
+    ```

+ 14 - 4
readme.md

@@ -140,13 +140,23 @@ http://sergeyteplyakov.blogspot.com/2014/01/microsoft-fakes-state-verification.h
 
 
 5. [Проект погода (продолжение): SplashScreen (заставка). Выбор города. Выбор и отображение массива значений (почасовая, ежедневная). Разбор XML.](./articles/weather2.md)
 5. [Проект погода (продолжение): SplashScreen (заставка). Выбор города. Выбор и отображение массива значений (почасовая, ежедневная). Разбор XML.](./articles/weather2.md)
 
 
+6. [Проект "база". Авторизация на сервере (Basic auth, token).](./articles/android_auth.md)
 
 
 <!-- 
 <!-- 
-ориентация
-регулярка для проверки email
-операции с датой
-alert с полями ввода (логин, пароль, кнопка регистрация)
+кнопки с картинками (нижнее или боковое меню)
 post-запросы с авторизацией
 post-запросы с авторизацией
+
+- название и иконка приложения
+- смена ориентации (фрейм)
+- сохранение данных при повороте (попов вт)
+- alert с полями ввода (логин, пароль, кнопка регистрация) (игимбаев сб)
+- регулярка для проверки email
+- операции с датой
+- выпадающий список (карта отправителя/получателя) (шарапова пн)
+- чтение/запись файлов (галерея) (смирнов чт)
+- локальное хранилище (малинин ср)
+swype???
+
 чат
 чат
 tablayout
 tablayout
 часы
 часы