Рубрики
Без рубрики

Google Summer of Code 2021 Заключительный отчет

Google Summer of Code 2021 Окончательный отчет этим летом я был рад выбрать для … Tagged с GSOC, OpenSource, Python, Backend.

Этим летом я был рад выбрать для Google Summer of Code’21 в рамках Гидра Экосистема организация Экосистема Hydra стремится создать набор инструментов для автоматизации процесса создания API REST и интеллектуальных клиентов следующего поколения, которые следуют принципу семантической сети, связанных данных и JSON-LD. Hydra – это словарь для API, который могут понять машины, и в настоящее время это проект, который создается и поддерживается Hydra-cg Анкет Это краткое изложение моей работы, проделанную этим летом в GSOC 2021.

Проект: Общие улучшения в гидрасе

Абстрактный

Идея проекта была посвящена улучшениям в существующем гидрисе (флагманский сервер). Это включало поддержку операции поста на Hydra: Collection Анкет Новые функциональные возможности были добавлены для эффективного обновления, получения или удаления конкретных участников из коллекции, не отправляя всю коллекцию в полезной нагрузке запроса. Много улучшений было сделано в операциях CRUD Hydrus, включая настройку ограничений и ошибок обработки на стороне сервера в зависимости от того, как хранятся данные. Проект также направлен на улучшение функциональности гидраса, оптимизации существующих кодов и поддержания его синхронизации с обновлениями и развитием в спецификациях Hydra-Python-Core и Hydra. В тестовом наборе были внесены некоторые серьезные изменения, и для операций CRUD было добавлено еще больше тестов. Новые функции были добавлены для поддержки различных данных дата в гидре и обеспечить техническую поддержку для проекта Banking API OpenRisk.

Список результатов и выполненных основных задач

Измененный ресурсный формат URI в Hydra-Python-Core

В последнюю неделю периода связывания сообщества меня попросили просмотреть PR в библиотеке Hydra-Python-Core и понял, что ему нужны больше изменений. Проблема заключалась в изменении формата URI. Мне потребовалось несколько дней, чтобы понять проблему и отладить основную библиотеку, чтобы найти необходимые изменения.

Я представил следующие PRS для решения проблемы:

Операция поддержки пост на Hydra: Коллекция

Добавлена поддержка для получения/обновления/удаления участников коллекции

Обновление Hydra: ресурс разрешен в Hydrus (наш флагманский сервер) и Hydra: Collection также является подклассом Hydra: Resource, однако выполнение запроса на коллекцию не было разрешено. Причина этого заключалась в том, что мы все еще пытались найти эффективный метод для обновления/удаления нескольких Hydra: участники из коллекции, фактически не отправляя всю коллекцию в органе запроса, который определенно не был правильным способом, поскольку она увеличится Полезная нагрузка сервера. Идея заключалась в создании новых конечных точек в Hydrus, которые примут оба идентификатора коллекции И это идентификатор члена как параметры.

GET: ////
DELETE: ///delete/

Это было сделано в следующем:

Удаление нескольких членов из коллекции

Следующим шагом было то же самое для удаления нескольких членов из коллекции. Я также создал что -то подобное для коллекций. Конечная точка, которую я создал, получит имя коллекции и список идентификаторов объектов в качестве параметра.

////delete/

Вот проблема и пиар для того же:

Изменить формат URI для Get/post/put/delete для Hydra: ресурс

После обсуждения с наставниками мы решили, что было бы лучше передать идентификаторы, разделенные после запятой в качестве параметра запроса вместо использования ключевых слов, таких как удаление или добавление. Кроме того, это сделает код для ресурса намного чище, поскольку нам не придется создавать отдельные представления API для удаления отдельных экземпляров или нескольких. Я должен был внести это изменение для всех существующих маршрутов и методов запроса, и это был конечный результат.

///?instances=

Также изменены существующие конечные точки для создания нескольких объектов в одном запросе.

Положить ( Ответ ):

{
 "@context":"https://www.w3.org/ns/hydra/core",
 "@type": "Status",
 "description": "Objects with ID ['id1','id2'] successfully added",
 "iri": ["id1","id2"],
 "statusCode": 201,
 "title": "Objects successfully added"
}

Удалить :

URI: /serverApi/movie? Enceances = id1, id2, id3

Ответ:

{
 "@context":"https://www.w3.org/ns/hydra/core",
 "@type": "Status",
 "description":"Objects with ID ['id1','id2'] successfully deleted",
 "statusCode": 200,
 "title": "Objects successfully deleted"}
}

Отношения иностранных ключей между Hydra: класс и Hydra: Collection

Эта проблема была о создании иностранных отношений между Hydra: Class и Hydra: Коллекция

Ранее, если бы объект был удален из класса, он все равно был бы в таблице сбора в базе данных (если он был ранее вставлен в коллекцию, которая непосредственно управляет этим классом). В таком случае ответ GET от конечной точки сбора покажет участник, доступный в базе данных, но вынесет ошибку InstancEnotFound, когда будет сделан запрос GET для просмотра деталей объекта, поскольку он уже был удален из класса. Чтобы исправить это, я использовал управляет Ключевое слово, чтобы проверить, если Hydra: Collection На самом деле управляет этим классом.

Вот проблема и пиар для того же:

Поддержка различных столбцов DatayPes в базе данных

Ранее все столбцы базы данных были установлены на строку, так как не было никакого способа указать тип переменной для Hydra: Поддержка Пропертиза. Я обсудил реализацию на еженедельной встрече с наставниками и придумал окончательный подход, который использовал ключевое слово диапазона для указания типа поддерживаемого свойства. Диапазон Ключевое слово может использоваться для указания данных дата свойства в соответствии со спецификациями HYDRA. У нас уже есть Hydra: диапазон (который также унаследован от RDF: диапазон) в контексте нашей документации по API.

"range": {
     "@id": "rdfs:range",
     "@type": "@id"
}

Идея заключалась в том, что пользователь может добавить диапазон в качестве аргумента ключевого слова в Hydraclassprop, создавая апидок, который будет расширен DOC_MAKER, а затем интерпретируется как https://www.w3.org/tr/xmlschema-2/#float . Теперь Hydrus изучит Apidoc, а затем создаст атрибуты в таблице баз данных в соответствии с их соответствующими типами столбцов.

Связанные вопросы и запросы на привлечение:

Добавить поддержку столбца DateTime в Hydrus

На этом этапе только целое число, плавало, строки поддерживались в базе данных.

Идея заключалась в том, что пользователь должен иметь возможность указать DataType, подобный «XSD: DateTime» при создании API DOC. Столбцы базы данных должны создаваться соответственно. Столбец SQLALCHEMY DATETIME занимает только объект DateTime. Но пользователь не может отправить объект DateTime в корпусе запроса (не json serializable). Вот почему я создал вспомогательные функции для преобразования строки DateTime в объект Python DateTime, а затем он будет вставлен в базу данных. Вспомогательная функция (get_modified_object) проверяет, есть ли какое -либо поддерживаемое свойство в объекте (тело запроса), которое на самом деле является полем DateTime. А затем возвращает измененный объект соответственно.

Связанные вопросы и запросы на привлечение:

Изменения в существующих тестовых случаях в гидре.

Добавлены еще несколько тестов и внесли модификации в существующих тестовых случаях. Рекса использовалась для получения идентификатора вставленного объекта из описания ответа. Вместо этого Я использовал response.location Чтобы получить идентификаторы созданных объектов на протяжении всего тестов.

PR: https://github.com/http-apis/hydrus/pull/601

Докеризация для POC

Следующая задача, назначенная мне, состояла в том, чтобы контейнеризировать Creditrisk-poc и используйте Docker-Compose, чтобы запустить такие службы, как Hydrus Server и Postgres Batase в контейнере. Я внес некоторые изменения в существующем репозитории и создал Dockerfile и файл Docker-Compose для того же. Ранее мы использовали ConfigParser для получения необходимой переменной среды из файла config.ini, вместо этого мы использовали ОС Модуль для переменных ENV из файла Docker-Compose и используется uwsgi.ini запустить сервер, используя Nginx.

Получить запросы:

Улучшение тестового покрытия в Hydra-Python-Core с использованием pytest

Для Doc_Writer присутствовало только три теста и только для тестирования контекста. В Hydra_python_core добавлено дополнительные тесты для различных компонентов Doc_writer, таких как гидрокласс, гидраколлик, HydraEntryPoint и многие другие. Кроме того, мы ранее использовали макет Unittest для создания макетных классов и объектов. Наряду с этим я использовал приспособления Pytest для тестирования различных компонентов и улучшения читаемости и увеличить тестовый охват.

PR: https://github.com/http-apis/hydra-python-core/pull/93

Помимо этих результатов, которые были завершены в течение периода кодирования. Я также работал над некоторыми ошибками и проблемами, которые были найдены в течение этого периода. Я добавлю список всех запросов на притяжение, сделанные в разделе взносов.

🚀 Вклады (в течение периода кодирования)

Вытащить запросы

Объединен ✅ #554 Добавлена новая конечная точка, чтобы получить/удалить член коллекции.
Объединен ✅ #578 Обновить документы и фиксированные фрагменты тест.
Объединен ✅ #580 Добавлена конечная точка, чтобы удалить несколько участников из коллекции
Объединен ✅ #590 Измененный формат конечной точки для получения, положить, удалить для нескольких объектов класса и коллекций
Объединен ✅ #591 Добавлены функциональные тесты для объектов PUT/DELETE несколько классов
Объединен ✅ #593 Добавлены отношения иностранных ключей между коллекцией и управляемым классом
Объединен ✅ #594 Добавлена поддержка DataType для столбцов в таблицах базы данных
Объединен ✅ #597 Рабочий процесс с использованием действий GitHub для публикации выпуска на PYPI
Объединен ✅ #599 Добавлена поддержка столбца DateTime в базе данных
Объединен ✅ #601 Изменения в тестах в гидрасе: удаленная регуляция
Объединен ✅ #603 Исправить функцию get_host_domain для развертывания
Открытым #81 Измененный ресурсный формат URI в Hydra-Python-Core
Объединен ✅ #84 Модифицированный doc_maker и обновленные образцы документов
Объединен ✅ #91 Добавлена поддержка DataType (диапазон) в поддерживаемых свойствах
Открытым #93 Добавлены тесты в ядре Hydra Python
Объединен ✅ #25 Dockerize CreditRisk_pocon
Объединен ✅ #26 удалить переменную среды пути апидока из Docker Compose

Благодарности

Я хотел бы поблагодарить моих наставников за их руководство и поддержку в рамках проекта и GSOC Journey. Я полностью верю, что это оказало положительное влияние на мой стиль написания кодов и тестов. Я с энтузиазмом быть активным участником и членом этой организации даже после завершения моего проекта и постараюсь сделать все возможное, чтобы сохранить это сообщество активным и здоровым.

Я также хотел бы поблагодарить моего коллеги GSOC Пурванш Сингх Для сотрудничества и обсуждений во время программы.

🔗 Контакт

Оригинал: “https://dev.to/farazkhanfk7/google-summer-of-code-2021-final-report-4h15”