ฉันใช้Django ส่วนที่เหลือกรอบ มันมีรูปแบบการจัดทำเอกสารด้วยตนเอง API ที่สามารถเรียกดูได้ของ Django ที่ยอดเยี่ยม แต่ทุกคนสามารถเยี่ยมชมหน้าเหล่านั้นและใช้อินเทอร์เฟซเพื่อเพิ่มข้อมูล (POST) ฉันจะปิดการใช้งานได้อย่างไร
ฉันใช้Django ส่วนที่เหลือกรอบ มันมีรูปแบบการจัดทำเอกสารด้วยตนเอง API ที่สามารถเรียกดูได้ของ Django ที่ยอดเยี่ยม แต่ทุกคนสามารถเยี่ยมชมหน้าเหล่านั้นและใช้อินเทอร์เฟซเพื่อเพิ่มข้อมูล (POST) ฉันจะปิดการใช้งานได้อย่างไร
คำตอบ:
คุณเพียงแค่ลบ API renderer ที่สามารถเรียกดูได้ออกจากรายการ renderers ที่รองรับของคุณเพื่อดู
โดยทั่วไป:
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
)
}
พื้นฐานต่อการดู:
class MyView(...):
renderer_classes = [renderers.JSONRenderer]
นอกเหนือ :
ในหลายกรณีที่ผมคิดว่ามันเป็นความอัปยศที่คนจะเลือกที่จะปิดการใช้งาน API สามารถเรียกดูได้ในกรณีใด ๆ เป็นมันช่วยให้นักพัฒนาที่ยิ่งใหญ่ใด ๆ ที่ทำงานเกี่ยวกับ API และมันไม่ได้ให้พวกเขามีสิทธิ์อื่น ๆ ที่พวกเขามิฉะนั้นจะมี ฉันสามารถเห็นได้ว่าอาจมีเหตุผลทางธุรกิจในการทำเช่นนั้นในบางกรณี แต่โดยทั่วไปฉันคิดว่ามันเป็นสินทรัพย์ขนาดใหญ่ แม้ว่าในบางกรณีอาจมีรายละเอียดปรากฏขึ้น (เช่นชื่อของการกระทำที่กำหนดเอง) ที่ API ที่ไม่ใช่สาธารณะอาจไม่ต้องการเปิดเผย
ดูคำตอบด้านล่างสำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการ จำกัด ตัวแสดง API ที่เรียกดูได้เพื่อการพัฒนา
it's a big aid to any developers working on the API
. พวกเขาไม่ควรมีไฟล์การตั้งค่าสำหรับการพัฒนาและการผลิตหรือไม่? ในการพัฒนาเปิดใช้ API ที่เรียกดูได้
ในขณะที่คำตอบที่ได้รับการยอมรับสำหรับคำถามนี้ไม่สามารถตอบคำถามได้เหมือนเดิม แต่ฉันรู้สึกว่ามันไม่สามารถแก้ปัญหาที่เกิดขึ้นจริงได้
เพื่อความสมบูรณ์ในคำตอบนี้การปิดใช้งาน HTML API ที่เรียกดูได้นั้นทำได้โดยการลบออกจากคลาส renderer ดังนี้:
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
)
}
อย่างไรก็ตามปัญหาที่แท้จริงของคำถามคือผู้คนสามารถโพสต์ไปยัง API โดยไม่ต้องมีการตรวจสอบสิทธิ์ ในขณะที่การลบแบบฟอร์มทำให้เห็นได้ชัดน้อยลงคำตอบนี้ไม่ได้ป้องกันจุดสิ้นสุดของ API
อย่างน้อยบางคนพบคำถามนี้และต้องการปกป้อง API จากการส่ง POST ที่ไม่ได้รับอนุญาตหรือไม่ได้รับอนุญาต กำลังมองหาการเปลี่ยนแปลงสิทธิ์ API
ต่อไปนี้จะตั้งค่าจุดสิ้นสุดทั้งหมดให้อ่านได้เว้นแต่ผู้ใช้จะได้รับการตรวจสอบสิทธิ์
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticatedOrReadOnly',
)
}
หากคุณต้องการที่จะสมบูรณ์ซ่อน API IsAuthenticated
เว้นแต่ผู้ใช้จะเข้าสู่ระบบคุณยังสามารถใช้
FYI: สิ่งนี้จะลบแบบฟอร์มออกจาก API ที่เรียกดูได้ของ HTML เนื่องจากจะตอบสนองต่อการอนุญาต เมื่อผู้ใช้รับรองความถูกต้องเข้าสู่ระบบแบบฟอร์มจะสามารถใช้ได้อีกครั้ง
รอบโบนัส :
เปิดใช้งาน HTML API ที่เรียกดูได้ใน dev เท่านั้น:
DEFAULT_RENDERER_CLASSES = (
'rest_framework.renderers.JSONRenderer',
)
if DEBUG:
DEFAULT_RENDERER_CLASSES = DEFAULT_RENDERER_CLASSES + (
'rest_framework.renderers.BrowsableAPIRenderer',
)
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticatedOrReadOnly',
),
'DEFAULT_RENDERER_CLASSES': DEFAULT_RENDERER_CLASSES
}
REST_FRAMEWORK['DEFAULT_RENDERER_CLASSES'].append('rest_framework.renderers.BrowsableAPIRenderer')
import rest_framework
For Production Only
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
)
}
เพียงแค่เพิ่มสิ่งนี้ลงใน Settings.py ของคุณควรปิดใช้งาน Browsable API!