#django #api #django-rest-framework #google-cloud-storage #credentials
#django #API #django-rest-framework #google-облачное хранилище #учетные данные
Вопрос:
Я хочу создать простой API, который предоставляет уникальную конечную точку для запроса POST, который принимает json в качестве параметра и загружает этот json в корзину в хранилище Google.
Для выполнения этой работы я использую Django framework.
Я хотел бы понять лучшие практики и шаблоны о том, как я должен структурировать свое приложение api для этого, и где я должен хранить учетные данные gcloud. (Кстати, я открыт для предложений по другим (лучшим) способам / технологиям / фреймворкам / шаблонам для создания такого API)
На данный момент я использую пакет google.cloud и размещаю все данные наapps.py файл ;
class ApiConfig(AppConfig):
storage_client = storage.Client.from_service_account_json('credentials.json')
bucket = storage_client.get_bucket('bucket_name')
затем в views.py файл, я выполняю определение функции post, используя корзину, определенную в apps.py файл.
class upload_to_bucket(APIView):
def post(self, request):
if request.method == 'POST':
json_file = json.loads(request.body)
blob = ApiConfig.bucket.blob(json_file['name'])
blob.upload_from_string(
data=json.dumps(json_file['json_file_to_upload']),
content_type='application/json'
)
return Response(json_file['json_file_to_upload'])
Спасибо, что помогли мне
Комментарии:
1. Где вы размещаете свой API?
2. На облачном сервере Google
Ответ №1:
Вы могли бы использовать Secrets Manager для хранения учетных данных, но в остальном я не вижу проблемы.
Ответ №2:
Если вы размещаете свое приложение, вам не нужен файл ключа учетной записи службы. Вы можете использовать ADC (учетные данные приложения по умолчанию).
В python и для storage API вы можете использовать это, как описано в документации
storage_client = storage.Client()
Таким образом, вам не нужна учетная запись службы. В local выполните gcloud auth application-default login
, чтобы загрузить свои собственные учетные данные в качестве учетных данных по умолчанию и использовать тот же конструктор по умолчанию в своем коде.