Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
4 / 4 / 0
Регистрация: 29.01.2019
Сообщений: 155
Записей в блоге: 1

Правила оформления кодов ошибок

28.02.2019, 11:58. Показов 827. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Хотелось бы услышать мнение коллег,
по поводу нумерации ошибок в проектах.

Изначально любой проект строю по принципу API,
независимо от его значимости.
Все вот эти сообщения типа, авторизация не удалась и прочая лабуда достала.

Хочется иметь более серьёзный подход.
Общепринятое правило нумерации ошибок.

В крупных проектах такие как vk.com или Yandex
Коды абсолютно разные и правила соответственно

Ниже приведены константы кодов возвратов как в vk.com
Планирую использовать эти правила с капелькой своей соли.


PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/**
 * Системные коды ошибок
 */
 
/** Произошла неизвестная ошибка. */
const ERR_UNKNOWN = 1;
/** Передан неизвестный метод. */
const ERR_UNKNOWN_METHOD = 3;
 
 
 
 
/**
 * Пользовательские коды ошибок
 */
 
/** Авторизация пользователя не удалась.  */
const ERR_USER_AUTHORIZATION_FAILED = 5;
 
/** Доступ запрещён.  */
const ERR_USER_ACCESS_DENIED = 15;
 
/** Авторизация временно недоступна */
const ERR_AUTHORIZATION_TEMPORARILY_UNAVAILABLE = 16;
 
/** Требуется авторизация пользователя.  */
const ERR_USER_AUTHORIZATION_REQUIRED = 17;

И собственно вопрос.

Ошибки должны быть классифицированы.

Системные ошибки
Пользовательские ошибки
...

Какие есть общепринятые правила классификации?



Вот как я это планирую использовать, на примере верификации пользователя

PHP
1
2
3
4
5
6
7
8
9
10
11
12
 if (!$this->verification()){
 
            switch (Common::getCurrentPatternType()){
                case "PAGE": {
                    Network::location('/sigIn');
                }
 
                case "DATA": {
                    Message::warning($this->lpm->translate('message', 'user_access_denied'), ERR_USER_ACCESS_DENIED);
                }
            }
        }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.02.2019, 11:58
Ответы с готовыми решениями:

Правила оформления длинных запросов
Привет. При создании записей в БД часто получаются длинные запросы вида $db->query("INSERT INTO `pages`...

Правила оформления программы
Ребята, поделитесь своими фишками\секретами\правилами и т.п. и т.д. при создании проектов. Как вы делаете свою программу более...

Правила оформления кода
Почему рекомендует писать классы и функции следующим образом?(вроде как добавляет лишнюю строку, а удобочитаемости..) class SomeClass :...

5
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
28.02.2019, 12:09
Какое преимущество вы видите от единого списка ошибок?

У нас например используется HTTP коды и текстовое описание ошибок (при необходимости)
4ХХ пользовательские ошибки.
5ХХ системные.
0
4 / 4 / 0
Регистрация: 29.01.2019
Сообщений: 155
Записей в блоге: 1
28.02.2019, 12:16  [ТС]
Давайте посмотрим

на https://vk.com/dev/errors
или WeChat

Я полагаю что эти ребята не дураки и стоит присмотреться к их реализации.
да и есть ещё масса примеров.

Я думаю они не с проста это, им нужен более широкий диапазон чем от 0 до 500

Да, я где то видел документацию по 4XX, 5ХХ ...
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
28.02.2019, 12:44
Цитата Сообщение от Popryduhin_ Посмотреть сообщение
Я полагаю что эти ребята не дураки и стоит присмотреться к их реализации.
Я тоже так думал до того как попал в одну из крупнейших компаний страны. Поверьте, там такие же прогеры как и мы). В компании с тысячами сотрудников, с сотнями микросервисов на разных ЯП вообще трудно придерживаться какого-то одного стиля.

Если вы пилите внешнее АПИ уровня ВК и Яндекс, то да, такой список может быть уместным.
1
4 / 4 / 0
Регистрация: 29.01.2019
Сообщений: 155
Записей в блоге: 1
28.02.2019, 13:11  [ТС]
Цитата Сообщение от tarasalk Посмотреть сообщение
Я тоже так думал до того как попал в одну из крупнейших компаний страны. Поверьте, там такие же прогеры как и мы). В компании с тысячами сотрудников, с сотнями микросервисов на разных ЯП вообще трудно придерживаться какого-то одного стиля.
Я это прекрасно понимаю.

Как то был у меня проект, нужно было парсить один крупнейший гипер-маркет и не только в России.
На столько коряво все это у них работало, столько дыр.
Да мне даже парится не пришлось, они отдавали валидный json.
Такое ощущение что это всё работает на коленке.

Это я к тому что имея бесконечные ресурсы и такие убоги проекты. прям как у меня (кроме ресурсов).



если вернуться к моему вопросу.
Вы полагаете что не имеет значения в каком порядке будет происходить нумерация.



Но наверное стоит их каким то образом классифицировать.

- системные
- пользовательские
- ещё какие то


Своего рода уровни.


Вообще о чём я?

например, если обращаясь по интерфейсу, не обнаруживаются данные то ошибка 404 не подходит
Это ошибка на уровне протокола и я хотел бы их оставить в покое и молча писать в лог и на основе их принимать решения
конвертируя их в собственные.

вот кусок из проекта над которым я работаю

клиент обращается на сервер за данными корзины пользователя

HTTP GET http://domain.com/method/cart.getCheckoutData

Ответ следующий:
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
   "error_code":0,
   "total":0,
   "count":1,
   "items":[
      {
         "id":358,
         "product_id":3,
         "create_at":"2019-02-28 12:23:46",
         "quantity":1,
         "price":0,
         "amount":0,
         "image":"\/content\/img\/miniatures\/5da4ddc9dd015fc90b8b3b0b25045672.png",
         "title":"阿伦卡华夫巧克力 250克"
      }
   ]
}
По каким то причинам он не может получить данные, но всегда клиент должен получить параметр error_code

Если 0 всё хорошо
Если положительное число, что то не ладное и соответствующее пояснение.

вот еще пример
HTTP GET /method/order.create
JSON
1
2
3
4
5
6
{  
   "error_code":15,
   "type":"warning",
   "title":"警告!",
   "msg":"訪問被拒絕!"
}
0
 Аватар для useruser
166 / 90 / 38
Регистрация: 29.06.2015
Сообщений: 1,100
28.02.2019, 13:36
У меня пока так.
Не обязательно оформлять функцией. Не обязательно хранить в файле. Просто показываю идею.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/*
Создать массив содержащий всю информацию о кодах ответа.
Номер кода, русское описание, английское описание.
*/
function create_information_code_array()
{
$i=0;
$a=$i++; $arr[$a][0]=0; $arr[$a][1]='Неизвестное событие или ошибка. (Код '.$arr[$a][0].')'; $arr[$a][2]='Unknown event or error.';
$a=$i++; $arr[$a][0]=1; $arr[$a][1]='Данные содержат запрещенные символы. (Код '.$arr[$a][0].')'; $arr[$a][2]='Data contains forbidden characters.';
$a=$i++; $arr[$a][0]=2; $arr[$a][1]='Логин содержит запрещенные символы. (Код '.$arr[$a][0].')'; $arr[$a][2]='Login contains forbidden characters.';
$a=$i++; $arr[$a][0]=3; $arr[$a][1]='Пароль содержит запрещенные символы. (Код '.$arr[$a][0].')'; $arr[$a][2]='Password contains forbidden characters.';
$a=$i++; $arr[$a][0]=4; $arr[$a][1]='Секрет содержит запрещенные символы. (Код '.$arr[$a][0].')'; $arr[$a][2]='Secret contains forbidden characters.';
$a=$i++; $arr[$a][0]=5; $arr[$a][1]='Нонс содержит запрещенные символы. (Код '.$arr[$a][0].')'; $arr[$a][2]='Nonce contains forbidden characters.';
$a=$i++; $arr[$a][0]=6; $arr[$a][1]='Токен авторизации содержит запрещенные символы. (Код '.$arr[$a][0].')'; $arr[$a][2]='Authorization token contains forbidden characters.';
$a=$i++; $arr[$a][0]=7; $arr[$a][1]='Криптоключ содержит запрещенные символы. (Код '.$arr[$a][0].')'; $arr[$a][2]='Cryptokey token contains forbidden characters.';
//до 10 зарезервировано
//
$a=$i++; $arr[$a][0]=11; $arr[$a][1]='Превышение допустимого количества авторизаций. (Код '.$arr[$a][0].')'; $arr[$a][2]='Exceeding the allowed number of authorizations.';
$a=$i++; $arr[$a][0]=12; $arr[$a][1]='Удаление ip (записи) из таблицы блокировок. (Код '.$arr[$a][0].')'; $arr[$a][2]='Delete ip (record) from the lock table.';
$a=$i++; $arr[$a][0]=13; $arr[$a][1]='В данных нет криптоключа. (Код '.$arr[$a][0].')'; $arr[$a][2]='Income data not contains cryptokey.';
$a=$i++; $arr[$a][0]=14; $arr[$a][1]='Пользователь не авторизирован. (Код '.$arr[$a][0].')'; $arr[$a][2]='User is not authorized.';
 
return $arr;
}
 
/*
Получить сообщение исходя из кода
Входные данные - код, язык сообщения.
*/
function get_message_by_code($code, $language)
{
$data='No message.';
$information_code_array=create_information_code_array();
for($i=0; $i<count($information_code_array); $i++ )
{
if ($code==$information_code_array[$i][0])
{
if ($language=='ru') $data=$information_code_array[$i][1];
if ($language=='en') $data=$information_code_array[$i][2];
}
}
$response=$data;
return $response;
}
 
 
/*
Короткий json ответ, содержащий информацию об ошибке или успехе на выбранном языке.
Входные данные - код, ok или error, язык сообщения.
*/
function json_short_response($code, $ok_or_error, $language)
{
$data='';
$result=$ok_or_error;
$information_code_array=create_information_code_array();
for($i=0; $i<count($information_code_array); $i++ )
{
if ($code==$information_code_array[$i][0])
{
if ($language=='ru') $data=$information_code_array[$i][1];
if ($language=='en') $data=$information_code_array[$i][2];
}
}
$response_array['data']=$data;
$response_array['result']=$result;
$response=json_encode($response_array);
return $response;
}

И где то в коде
PHP
1
2
3
4
5
$code=35;
//Вывод сообщений об ошибке (как для web так и для программы)
if ($all_about_user['interface']=='web') echo \crypto3\crypto3_data\show_error_web_page($code);
if ($all_about_user['interface']!='web') echo \crypto3\crypto3_data\json_short_error_response($code);
exit();
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.02.2019, 13:36
Помогаю со студенческими работами здесь

Правила оформления кода
Здравствуйте. Что то порылся в поиске и не нашел. Подскажите статьи, литературу, где грамотные советы даются о том как правильно оформить...

Правила оформления кода c++
Приветствую! В общем не редкость встречается, вот такие оформления class SomeClass { private: int _length; ...

Правила оформления схем алгоритмов
...

Правила стилевого оформления документов MS Word
Вот задали самостоятельную работу не пойму ЧТО ОТ МЕНЯ ТРЕБУЕТСЯ?

Правила оформления, и вызов времени компиляции constexpr-функций
Всем привет! Есть рабочий код: #include &lt;iostream&gt; #include &lt;cassert&gt; namespace test { template &lt;class...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru