ডকুমেন্টেশনPython API এবং ত্রুটি
ব্যতিক্রম এবং ত্রুটি
একটি অনুরোধ চারটি জায়গায় ব্যর্থ হতে পারে এবং Nexy প্রতিটির ভিন্নভাবে উত্তর দেয়৷ এই পৃষ্ঠাটি হল সূচী: আপনি যে স্ট্যাটাসটি দেখছেন তা খুঁজুন, তারপর যে লাইনটি এটি তৈরি করেছে, তারপর ফাইলটি যা বডি নির্ধারণ করে।
সংক্ষিপ্ত সংস্করণ
| কি হয়েছে | স্ট্যাটাস | ব্রাউজার দেখে | API ক্লায়েন্ট দেখে |
|---|---|---|---|
| URL এর সাথে কোনো রুট মেলে না | 404 |
notfound.nexy, অন্যথায় অন্তর্নির্মিত পৃষ্ঠা |
{"detail": "Not Found"} |
| একটি পাথ সেগমেন্ট তার টীকাটির সাথে খাপ খায় না | 404 |
একই পৃষ্ঠা | {"detail": "Not Found"} |
| একটি ক্যোয়ারী, হেডার, কুকি বা বডি ফিল্ড অনুপস্থিত বা অবৈধ | 422 |
FastAPI এর JSON বডি | FastAPI এর JSON বডি |
notFound() |
404 |
পাতা | {"detail": ...} |
unauthorized() |
401 |
অন্তর্নির্মিত পৃষ্ঠা | {"detail": ...} |
forbidden() |
403 |
অন্তর্নির্মিত পৃষ্ঠা | {"detail": ...} |
raise HTTPException(409, ...) |
409 |
অন্তর্নির্মিত পৃষ্ঠা | {"detail": ...} |
| একটি ব্যতিক্রম কিছুই ধরা | 500 |
errors.nexy, অন্যথায় অন্তর্নির্মিত পৃষ্ঠা |
{"detail", "reference"} |
redirect(url) |
307 |
গন্তব্য, পৃষ্ঠা নেই | গন্তব্য, শরীর নেই |
permanentRedirect(url) |
308 |
গন্তব্য, পৃষ্ঠা নেই | গন্তব্য |
একটি API ক্লায়েন্ট হল একটি অনুরোধ যার Accept শিরোনাম JSON এর জন্য জিজ্ঞাসা করে এবং একটি পৃষ্ঠার জন্য নয়:
curl -H "Accept: application/json" http://localhost:3000/api/items/500# {"detail":"Out of range"}
ব্যর্থতা কোথা থেকে আসে
Browser ──► Middleware ──► Router ──► Page or handler
│ │ │
│ │ ├─ return ───────────► 200
│ │ ├─ HTTPException ────► its status
│ │ └─ other exception ───► 500
│ └─ no match ────────────────────────► 404
└─ raises ──────────────────────────────────────► 500| মঞ্চ | কি ব্যর্থ হতে পারে | উত্তর |
|---|---|---|
| মিডলওয়্যার | আপনার middleware.py, CORS, সেশন |
ব্যতিক্রমের অবস্থা, অন্যথায় 500 |
| রাউটার | URL কোনো ফাইলের সাথে মেলে না | 404 |
| বৈধতা | একটি পাথ সেগমেন্ট রূপান্তর করা যাবে না | 404 |
| বৈধতা | একটি ক্যোয়ারী, হেডার, কুকি বা বডি ফিল্ড | 422 |
| পৃষ্ঠা, হ্যান্ডলার, অ্যাকশন, গার্ড | HTTPException |
এর অবস্থা |
| পৃষ্ঠা, হ্যান্ডলার, অ্যাকশন, গার্ড | অন্য কিছু | 500 |
যে কোন জায়গা থেকে চলে যান
redirect, permanentRedirect, notFound, forbidden এবং unauthorized একটি HTTP ব্যতিক্রম উত্থাপন করে, তাই একই কল একটি .nexy পৃষ্ঠা, একটি API হ্যান্ডলার, একটি মডুলার কন্ট্রোলার, একটি গার্ড, একটি dependencies.py এবং একটি অ্যাকশনে কাজ করে।
from nexy import notFound, redirect from src.posts import find async def GET(slug: str): post = find(slug) if post is None: notFound("No such post") if post.moved_to: redirect(post.moved_to) return postfrom nexy import notFound, redirectfrom nexy.decorators import Controller from src.posts import find @Controller("/posts/{slug}")class PostsBySlugController: async def get(self, slug: str): post = find(slug) if post is None: notFound("No such post") if post.moved_to: redirect(post.moved_to) return postরুট মডিউলের controllers কন্ট্রোলারের তালিকা করুন।
| কল | উত্তর | কখন |
|---|---|---|
notFound(detail=None) |
404 |
সম্পদের অস্তিত্ব নেই |
unauthorized(detail=None, scheme=None) |
401 |
ভিজিটরকে প্রথমে সাইন ইন করতে হবে |
forbidden(detail=None) |
403 |
দর্শক পরিচিত কিন্তু এটি দেখতে নাও হতে পারে |
redirect(url, status=307) |
307 |
তাদের অন্যত্র পাঠান, পদ্ধতি বজায় রেখে |
redirect(url, status=303) |
303 |
একটি ফর্মের পরে: পরবর্তী অনুরোধটি একটি GET |
permanentRedirect(url) |
308 |
একটি সরানো পৃষ্ঠা যা সার্চ ইঞ্জিনের মনে রাখা উচিত |
আপনার বিশ্বাসযোগ্য মানগুলি থেকে গন্তব্য তৈরি করুন। redirect(request.query_params["next"]) যেখানে লিঙ্ক বলে সেখানে দর্শকদের পাঠায়; এটি একটি খোলা পুনঃনির্দেশ। একটি লাইন বিরতি ধারণ করে এমন একটি গন্তব্য প্রত্যাখ্যান করা হয়েছে৷
বৈধতা: 422, বা 404
হ্যান্ডলার প্যারামিটারগুলি তাদের টীকাগুলির বিরুদ্ধে FastAPI দ্বারা যাচাই করা হয়।
from nexy.http import Header async def GET(q: str, limit: int = 10, x_token: str = Header(...)): return {"q": q, "limit": limit}from nexy.decorators import Controllerfrom nexy.http import Header @Controller("/api/search")class SearchApiController: async def get(self, q: str, limit: int = 10, x_token: str = Header(...)): return {"q": q, "limit": limit}রুট মডিউলের controllers কন্ট্রোলারের তালিকা করুন।
| সমস্যা | স্ট্যাটাস | কেন |
|---|---|---|
| অনুপস্থিত বা অবৈধ ক্যোয়ারী, হেডার, কুকি বা বডি ফিল্ড | 422 |
অনুরোধ হ্যান্ডলার পৌঁছেছে, তথ্য ভুল |
অবৈধ পাথ সেগমেন্ট (/api/users/abc এর জন্য id: int) |
404 |
ফোল্ডারে একটি নন-সংখ্যার জন্য কোন রুট নেই, তাই URLটি বিদ্যমান নেই |
422 বডিটি FastAPI-এর আদর্শ আকৃতি, তাই ক্লায়েন্ট এবং জেনারেট করা SDK কাজ চালিয়ে যায়:
{"detail": [{"loc": ["query", "q"], "msg": "Field required", "type": "missing"}]}
একটি ফর্ম বা একটি কর্মের জন্য, ক্লায়েন্ট একটি ActionError status এবং detail সহ পায়; একটি 422 এছাড়াও প্রতি ক্ষেত্রে একটি বার্তা দিয়ে error.fields পূরণ করে। কর্ম দেখুন।
কাস্টম ত্রুটি পৃষ্ঠা
<h1>Page not found</h1><p>The link may be old. <a href="/">Start from the home page</a>.</p><h1>Something went wrong</h1><p>Try again in a moment.</p>| ফাইল | স্ট্যাটাস | ব্যাপ্তি |
|---|---|---|
src/routes/notfound.nexy |
404 |
প্রকল্পের প্রতিটি রুট |
src/routes/errors.nexy |
500 |
প্রকল্পের প্রতিটি রুট |
src/routes/forbidden.nexy |
403 |
প্রকল্পের প্রতিটি রুট |
src/routes/unauthorized.nexy |
401 |
প্রকল্পের প্রতিটি রুট |
src/routes/blog/notfound.nexy |
404 |
/blog এবং নীচে |
src/routes/blog/errors.nexy |
500 |
/blog এবং নীচে |
src/routes/loading.nexy |
- | সংরক্ষিত, এখনও কোন রানটাইম প্রভাব |
রুটের কোথাও একটি ফাইল তার স্থিতির জন্য উত্তর ইনস্টল করে: রুটে একটি অনুলিপি পুরো প্রকল্পের উত্তর দেয়, একটি ফোল্ডারের একটি অনুলিপি সেই ফোল্ডারটির উত্তর দেয় এবং URL এর সাথে মেলে এমন গভীরতম ফাইলটি জয়লাভ করে। প্রতিটি অনুলিপির বাইরে একটি URL, এবং কোনো ফাইল ছাড়াই একটি স্থিতি, অন্তর্নির্মিত স্টাইলযুক্ত পৃষ্ঠাগুলি পান৷ ফোল্ডার প্রতি ত্রুটি পৃষ্ঠাগুলি দেখুন।
মডুলার রাউটারের একটি ফাইলে কোনো ত্রুটির পৃষ্ঠা নেই: একটি 404, 500, 403 বা 401 বিল্ট-ইন স্টাইলযুক্ত পৃষ্ঠা পায়। ফোল্ডার প্রতি ত্রুটি পৃষ্ঠাগুলি ফাইল-ভিত্তিক রাউটারের একটি নিয়ম।
অব্যবহিত ব্যতিক্রম
একটি ব্যতিক্রম যে ধরা পড়া কিছুই একবার লগ করা হয় না, তার রেফারেন্স সহ, এটি কোথা থেকে এসেছে এবং এর চারপাশের কোড। অবস্থা হল 500, এবং শরীর পরিবেশের উপর নির্ভর করে।
nexy dev |
nexy build তারপর nexy start |
|
|---|---|---|
| ব্রাউজার | ত্রুটি, আপনার কোডের লাইন এবং ট্রেসব্যাক | errors.nexy, অন্যথায় একটি রেফারেন্স সহ অন্তর্নির্মিত পৃষ্ঠা |
| API ক্লায়েন্ট | {"detail", "reference", "error"} |
{"detail", "reference"} |
| টার্মিনাল | ব্যতিক্রম এবং আপনার কোড লাইন | ব্যতিক্রম, পুরো ট্রেসব্যাক এবং রেফারেন্স |
x ZeroDivisionError: division by zero GET /boom ref fe6a5217 at src/routes/boom.py:2 in GET 1 | def GET(): 2 | return {"a": 1 / 0}
রেফারেন্সটি আটটি অক্ষর, প্রতিটি ব্যর্থতার জন্য নতুন। একজন দর্শক এটি উদ্ধৃত করতে পারেন, এবং আপনি এটির জন্য লগ অনুসন্ধান করে ট্রেসব্যাক খুঁজে পাবেন। ব্যতিক্রম বা কোডটিও উৎপাদনে দর্শকের কাছে পৌঁছায় না।
কর্ম এবং ফর্ম
একটি ক্রিয়া হল একটি POST শেষ বিন্দু যার একটি উৎপন্ন পাথ রয়েছে। এর ব্যর্থতা একই নিয়ম অনুসরণ করে:
| পরিস্থিতি | স্ট্যাটাস | ক্লায়েন্ট |
|---|---|---|
| একটি ক্ষেত্র অনুপস্থিত বা অবৈধ | 422 |
ActionError সাথে fields |
HTTPException(403) কর্মে উত্থাপিত |
403 |
ActionError status এবং detail সহ |
| একটি অনিয়ন্ত্রিত ব্যতিক্রম | 500 |
ActionError; রেফারেন্সটি সার্ভার লগে রয়েছে |
Origin শিরোনাম আরেকটি সাইট |
403 |
অ্যাকশন চালানোর আগে প্রত্যাখ্যান করেছিল |
কর্ম পথের পোস্ট ছাড়া একটি ফর্ম JavaScript; একটি সাফল্যের উত্তর 303 পৃষ্ঠায় ফিরে আসে, একটি ব্যর্থতা ত্রুটির পৃষ্ঠাটি দেখায়। দেখুন কর্ম।
একটি চেকলিস্ট যখন একটি পৃষ্ঠা ভুল উত্তর দেয়
- স্ট্যাটাস দেখুন, পেজ নয়। একটি কাস্টম
notfound.nexyএখনও উত্তর দেয়404। - পড়ুন টার্মিনাল একটি পৃষ্ঠা যা আমদানি করতে ব্যর্থ হয় তা নিবন্ধিত নয়, তাই ফাইলটি বিদ্যমান থাকাকালীন এটির URL
404উত্তর দেয়। আমদানি ত্রুটি লগে আছে। - চেক করুন এক্সটেনশন
useCSR = Trueসহ,.nexyপৃষ্ঠাগুলি সার্ভার মোডের অন্তর্গত; ভুল মোডে একটি পৃষ্ঠা একটি রুট নয়। - চেক করুন গভীরতা একটি
notfound.nexyবাerrors.nexyশুধুমাত্র তখনই কাজ করে যখন রুট কপি বিদ্যমান থাকে। - আপনার API ক্লায়েন্ট প্রাপ্ত আকৃতি দেখতে
Accept: application/jsonসহ JSON এর জন্য জিজ্ঞাসা করুন। - আপনি একটি সমস্যা খুললে বা লগ অনুসন্ধান করার সময় একটি
500এর রেফারেন্স উদ্ধৃত করুন।
পরবর্তী পদক্ষেপ
- ত্রুটি পৃষ্ঠাগুলি: সম্পূর্ণ পৃষ্ঠার আচরণ, উদাহরণ সহ
- বৈধতা এবং ত্রুটি: API হ্যান্ডলার
- ট্রাবলশুটিং: মানুষ আসলে যে ত্রুটিগুলি আঘাত করে
- টেস্টিং : একটি স্ট্যাটাস এবং একটি শরীর জাহির করুন