Тапсырма орындалған ретінде көрсетіледі, бірақ жүктеп алу бос файл ма? Бөлек орындау және жеткізу күйі
Түймеде «Дайын» деп жазылған, бірақ «Жүктеу» түймесін басқан кезде, мен бос файлды аламын ба? Мәселе көбінесе шақыру мәтінінде емес, бірақ сервер жеткізудің дайын екендігінде емес, тек алгоритмнің орындалғанын ғана есте сақтауында. Орындау күйі мен жеткізу күйін бөлу арқылы ғана фронт-end пайдаланушыға нақты орындалу барысын айта алады. Бұл мақала бөліну идеясын анық түсіндіреді.
Тапсырма бетінде "Аяқталды" көрсетіледі, бірақ жүктеп алу түймесін басқан кезде бос файлды аламын. Мәселе көбінесе шақыру мәтінінің өзінде емес, бірақ серверлік бағдарлама тек алгоритмнің орындалу аяқталуын жазады және жеткізудің дайын екенін жазбайды. Бұл мақала құжаттарды өңдеуді, асинхронды тапсырмаларды немесе аударманы біріктіруді орындайтын әзірлеушілерге арналған. Оқып болғаннан кейін сіз орындау күйі мен жеткізу күйін қалай бөлу керектігін білесіз, осылайша алдыңғы бөлік пайдаланушыға нақты прогресті көрсете алады.
Осы мақаладағы мысалдар синтетикалық үлгілерді пайдаланады және код оқшауланған ортада үлгі тексерілді. Бұл барлық нақты файлдарға немесе өнім әсерлеріне кепілдік бермейді. Маңызды құжаттарды өңдеуден бұрын түпнұсқаларды сақтап, мәтіндегі шекаралар мен қабылдау элементтеріне сәйкес қарап шығыңыз.
Жүктеп алу бос файл, бірақ тапсырма орындалған ретінде көрсетілді ме? Бір сөйлемнен қорытынды
Алдымен «өңдеу аяқталды» күйін үш күйге бөліңіз: өңдеу, өнім және қабылдау, содан кейін алдыңғы жағында тек расталған күйді көрсетуге мүмкіндік беріңіз.
| сіздің жағдайыңыз | Ұсынылатын тәжірибелер | себебі |
|---|---|---|
| Тапсырма аяқталды, бірақ файл әлі жасалмады | «Өнім дайын» күйін енгізіңіз және оны алдын ала көрсетпей жүктеп алуға болады. | Өңдеудің аяқталуы тек есептеудің тоқтағанын білдіреді, бірақ орналастыруға болатын файлдар бар дегенді білдірмейді. |
| Файл жасалды, бірақ мазмұны әлі тексерілмеген | «Тексеру нәтижелерін» сақтап, қабылдауды күтіңіз | Өнімнің дайындығы жеткізу келісімін орындауды білдірмейді |
| Тапсырма орындалмады | Сәтсіздік кезеңі мен себебін көрсетіп, сәйкес әрекеттерді көрсетіңіз | Сәтсіздіктің де кезеңдері болуы керек және оларды айналдыру белгішесі арқылы жасыруға болмайды |
| Жүктеп алу HTTP 200 қайтарады | Түрін, өлшемін, талдаудың қолжетімділігін және күтілетін мазмұнды тексеруді жалғастырыңыз | 200 кіру бетіне, JSON қатесіне немесе бос құжатқа сәйкес келуі мүмкін |
Ең болмағанда өңдеу, өнім және қабылдауды ажыратыңыз
Өңдеудің аяқталуы есептеудің тоқтағанын білдіреді; өнім дайын, яғни файлды орналастыруға болады; және қабылдау аяқталды, яғни файл жеткізу келісіміне сәйкес келеді. Үшеуі міндетті түрде бір уақытта бола бермейді.
Сәтсіздіктің де кезеңдері болуы керек және оларды тұрақты айналатын белгіше арқылы жасыруға болмайды. Пайдаланушы өңдеу, жасау немесе тексеру кезінде қатенің орын алғанын біледі, сондықтан олар енгізуді күту, қайталау немесе жөндеу керек пе екенін біледі.
📊 Негізгі салыстыру
| күй | Сұрақтарға жауап берді | Пайдаланушыларға жүктеп алуға уәде беруге бола ма? |
|---|---|---|
| Өңдеудің аяқталуы | Есептеу тоқтады ма | мүмкін емес |
| Өнім дайын | Орналастыруға болатын файл бар ма | Жоқ, әлі де тексеру керек |
| Қабылдау аяқталды | Құжат жеткізу шартына сәйкес келе ме? | мүмкін |
Секіру сәттілігін анық жоққа шығару
from enum import Enum
class State(Enum):
PROCESSING = "processing"
ARTIFACT_READY = "artifact_ready"
VERIFIED = "verified"
FAILED = "failed"
def transition(state, event):
allowed = {
(State.PROCESSING, "stored"): State.ARTIFACT_READY,
(State.PROCESSING, "error"): State.FAILED,
(State.ARTIFACT_READY, "checks_passed"): State.VERIFIED,
(State.ARTIFACT_READY, "error"): State.FAILED,
}
if (state, event) not in allowed:
raise ValueError("invalid state transition")
return allowed[(state, event)]
s = transition(State.PROCESSING, "stored")
assert s is State.ARTIFACT_READY
assert transition(s, "checks_passed") is State.VERIFIED
assert transition(s, "error") is State.FAILED
try:
transition(State.PROCESSING, "checks_passed")
except ValueError:
pass
else:
raise AssertionError("cannot skip artifact readiness")
Бұл синтетикалық күй машинасы кезектен бас тартуды, қарауды және жарамдылық мерзімін жоюды қамтымайды. Өндірістік енгізулер барлық оқиғаларды «сәттілік/сәтсіздік» екілік жүйесіне кіргізбей, бизнеске сәйкес масштабталуы керек.
Асинхронды хабарламалар да қайталануы немесе ретсіз болуы мүмкін, бұл нұсқа нөмірлерінің, транзакциялардың және идемпотентті өңдеудің ынтымақтастығын талап етеді. Әйтпесе, ескі хабарлар жаңа күйді қайта жазуы мүмкін және сол тапсырма қайталанып жазылуы мүмкін.
Фронттік сұраулар фактілерге сәйкес келуі керек
Алдыңғы жағындағы әрбір күй артқы жағында расталатын және сәйкес қол жетімді әрекеттерді беретін фактіге сәйкес келуі керек.
| күй | Пайдаланушылар көре алады | Қолжетімді әрекеттер |
|---|---|---|
| processing | Өңдеу | Орындалу барысын тексеріңіз немесе бас тартыңыз |
| artifact_ready | Нәтижелерді тексеру | Алдын ала міндеттемесіз қол жетімді |
| verified | Жүктеп алуға болатын файл | Жүктеп алу және қабылдау нұсқауларын қараңыз |
| failed | Сәтсіздік кезеңдері және себептері | Себеп бойынша түзетіңіз немесе қайталап көріңіз |
Жүктеп алу сәтті болса да, бұл мазмұн дұрыс дегенді білдірмейді.
HTTP 200 кіру бетін, қате JSON немесе бос құжатты қайтаруы мүмкін. Қабылдау кем дегенде келесі элементтерді тексеруі керек:
- Түр: файл пішімінің күтілгендей болуы
- Өлшем: файл бос па, әлде қалыпты емес пе
- Талдау қолжетімділігі: файлды қалыпты түрде ашуға және талдауға болады ма
- Күтілетін мазмұн: мазмұн тапсырма талаптарына сәйкес пе
Аударма үшін тіл тұтастығы мен терминологияны тексеру жоғары деңгейлі тексерулер болып табылады және оларды "файлды ашуға болады" дегенге ауыстыруға болмайды.
Аударма мүмкіндіктерін біріктіру кезінде күйді ашық ұстаңыз
OmniDoc (өнім порталы) сайтына кіргеннен кейін, сіздің жеке өнімдеріңіз әлі де өздерінің жеке сақтау және жеткізу күйін сақтауы керек. Платформаның тапсырмасы аяқталғаннан кейін оны алдымен «Нәтижелерді қабылдауды бастау» деп салыстыруға болады, содан кейін файл қолжетімді екенін растағаннан кейін сәттілік көрсетіледі. Бұл күйді тікелей жіберуден гөрі пайдаланушының нақты тәжірибесіне көбірек сәйкес келеді.
Дереккөздер: Python enum
🎯 Сізге қай әдіс қолайлы?
егер сіз……
Егер тапсырма тек фондық есептеу болса және сыртқы жеткізу файлы болмаса
Тек өңдеудің аяқталуын және сәтсіздік кезеңдерін жазу керек, ал өнімді және қабылдауды уақытша өткізіп жіберуге болады.
Егер пайдаланушыларға нәтижелерді жүктеп алуға рұқсат беру қажет болса
Өнім дайын болғанша және жүктеп алуға қолжетімді болып көрсетілмес бұрын қабылдаудан өткенше күтуіңіз керек.
Егер сізде үшінші тарап өңдеу платформасына рұқсатыңыз болса
Платформаның аяқталуын «Нәтижелерді қабылдауды бастау» параметріне карталаңыз, содан кейін файлды растағаннан кейін сәтті көрсетіңіз.
Тапсырмалар қайталануы немесе ретсіз қайтарылуы мүмкін болса
Күйге нұсқа нөмірін қосыңыз және күй тек транзакциялар мен идемпотентті өңдеу арқылы алға жылжуын қамтамасыз етіңіз.
❓ Жиі қойылатын сұрақтар (ЖҚС)
1. Тапсырма орындалған ретінде көрсетіледі, неге оны әлі жүктеп алу мүмкін емес?
Өңдеудің аяқталуы тек есептеудің тоқтағанын білдіретіндіктен, сонымен қатар өнімнің дайын екендігін және қабылдаудан өткенін растау қажет, яғни файл жеткізу келісіміне сәйкес келеді.
2. Жүктеп алу HTTP 200 қайтарады. Бұл файлда мәселе жоқ дегенді білдіре ме?
белгісіз. HTTP 200 кіру бетін, қате JSON немесе бос құжатты қайтаруы мүмкін, сонымен қатар түрін, өлшемін, талдау қолжетімділігін және күтілетін мазмұнды тексеруді қажет етеді.
3. Неліктен сәтсіздік күйінің кезеңдері бар?
Сәтсіздік фазасы пайдаланушыға мәселенің өңделуін, генерациялануын немесе тексеріліп жатқанын айтады, осылайша олар кірісті күтуді, қайталап көруді немесе түзетуді шеше алады.
4. Аударма тапсырмалары үшін файлды ашу жеткілікті ме?
жеткіліксіз. Тілдің тұтастығы мен терминологияны тексеру жоғары деңгейлі тексерулер болып табылады және оларды «файлды ашуға болады» дегенге ауыстыруға болмайды.
📝 Түйіндеме
Орындау күйі мен жеткізу күйін бөлу арқылы ғана алдыңғы жақ пайдаланушыға нақты орындалу барысын айта алады. Өнім дайын болғанда және қабылдаудан өткенде ғана оны жүктеп алуға қолжетімді ретінде көрсету керек.


