コード2021最終報告



コード2021最終報告


この夏、私は2009年夏のコードのGoogle夏のために選択されてうれしかったHydra Ecosystem 組織ヒドラ生態系は、セマンティックWebの原則に従って、残りの世代のスマートクライアントを構築するプロセスを自動化するツールのセットを構築することを目指して、リンクデータ、およびJSON - LD.Hydraは、マシンが理解できるAPIのための語彙であり、それは現在作成され、維持されている草案ですHydra-CG . これは、GSOC 2021年に行われた私の作品の要約です.
プロジェクトGeneral Improvements in Hydrus

抄録


プロジェクトのアイデアは、既存のHydrus(フラッグシップサーバー)の改善についてでした.これにはPOST操作のサポートが含まれていましたhydra:Collection . 新しい機能は、効果的に更新、取得または削除のコレクションから特定のメンバーを実際に要求ペイロードのコレクション全体を送信せずに追加されました.多くの改良がHydrusのCRUD操作でなされました.そして、データを格納する方法に応じて、サーバー側で制約を処理して、エラーを扱います.プロジェクトはまた、Hydrusの機能を強化し、既存のコードを最適化し、それをアップグレードとHydra PythonのコアとHydraの仕様での開発と同期を維持することを目指しています.いくつかの主要な変更は、テストスイートで行われ、さらに多くのテストは、CRUD操作のために追加されました.新機能は、Hydrusで別のデータ型をサポートするために追加され、OpenScoreの銀行APIプロジェクトの技術サポートを提供します.

コーディング期間


List of deliverables and major tasks completed


Hydra PythonコアのリソースURI形式の変更


コミュニティ結合期間の最後の週に、私はHydraパイソン芯図書館でPRをチェックするよう頼まれて、それが若干のより多くの変化を必要とすると理解しました.問題は、URIの形式を変えることでした.問題を理解し、必要な変更を見つけるためにコアライブラリをデバッグするのに数日かかった.
私は、問題を解決するために以下のPRSを提出しました:
  • https://github.com/HTTP-APIs/hydra-python-core/pull/81
  • https://github.com/HTTP-APIs/hydra-python-core/pull/84
  • https://github.com/HTTP-APIs/hydrus/pull/578
  • Hydraのサポートポスト操作:コレクション


    Added support to get/update/delete members of a collection


    Hydraのupdeation:資源はHydrus(Heavship Server)とHydraで許可されます:コレクションはまたHydraのサブクラスです:リソースが、コレクションへのポスト要求をすることは許されませんでした.この理由の背後にある理由は、私たちはまだいくつかのHydraを更新/削除するための効果的な方法を見つけることを試みていました:実際には、サーバーのペイロードを増加させるとして行くには、正しい方法ではなかったリクエスト本文で全体のコレクションを送信せずにコレクションからのメンバー.アイデアはHydrusで新しいエンドポイントを作成することでした.
    GET: /<api_name>/<collection_name>/<collection_id>/<member_id>
    DELETE: /<collection_name>/<collection_id>/delete/<member_id>
    
    これは次のようにした.
  • 関連事項https://github.com/HTTP-APIs/hydrus/issues/494
  • PRhttps://github.com/HTTP-APIs/hydrus/pull/554
  • コレクションからの複数のメンバーの削除


    The next step was allowing the same for deletion of multiple members from the Collection. I created something similar for Collections as well. The endpoint I created would take name of the collection and a list of object ids as a parameter.


    /<api-name>/<resource_name>/<collection-id>/delete/<ids_list>
    
    以下に問題とprを示します.
  • https://github.com/HTTP-APIs/hydrus/issues/579
  • https://github.com/HTTP-APIs/hydrus/pull/580
  • https://github.com/HTTP-APIs/hydrus/pull/591
  • Hydraリソースの取得/ポスト/プット/削除のURI形式を変更する


    メンターとの議論の後、私たちは、削除またはADDのようなキーワードを使用する代わりにコンマパラメータの後に区切られたIDを通過するほうがよいと決めました.また、単一のインスタンスまたは複数の削除のために別々のAPIビューを作成する必要がないので、リソースのコードをはるかにきれいにします.私はすべての既存のルートと要求メソッドのためにこの変更をしなければなりませんでした、そして、これは最終結果でした.
    /<api-name>/<resource_name>/<collection-id>?instances=<ids_list>
    
    また、単一の要求で複数のオブジェクトを作成するための既存のエンドポイントを変更しました.
    プット(レスポンス)
    {
     "@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?instances=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"}
    }
    
  • PRhttps://github.com/HTTP-APIs/hydrus/pull/591
  • Hydra :クラスとHydraの間の外部キー関係


    This issue was about creating a foreign-key relationship between a hydra:Class and hydra:Collection


    以前は、オブジェクトがクラスから削除されている場合は、データベース内のコレクションテーブルにまだ存在します(以前はそのクラスを直接管理するコレクションに挿入されていた場合).このような場合、コレクションエンドポイントからのGET応答は、データベースで利用可能なメンバーが表示されますが、Get要求がクラスの中から削除されているので、GETリクエストがオブジェクトの詳細を表示するときにInstanceNotErrorエラーをスローします.これを修正するにはmanages チェックするキーワードhydra:Collection 実際にそのクラスを管理します.
    以下に問題とprを示します.
  • 課題https://github.com/HTTP-APIs/hydrus/issues/592
  • PRhttps://github.com/HTTP-APIs/hydrus/pull/593
  • データベース内の異なるデータ列のサポート


    Previously, all database columns were set to String as there was no way of specifying the type of variable for a hydra:supportedProperty.
    I discussed the implementation in a weekly meeting with mentors and came up with the final approach which was using range keyword to specify the type of a supported property. range keyword can be used to specify the datatype of a property according to Hydra specifications. We already have hydra:range (which is also inherited from rdfs:range) in our API documentation’s context.


    "range": {
         "@id": "rdfs:range",
         "@type": "@id"
    }
    
    そのアイデアは、ユーザーがHydraclassPropのキーワード引数として範囲を追加することができます.https://www.w3.org/TR/xmlschema-2/#float . さて、Hydrusはapidocを調べ、それぞれの列型に従ってデータベース表の属性を作成します.
    関連する問題とプル要求
  • https://github.com/HTTP-APIs/hydrus/issues/581
  • https://github.com/HTTP-APIs/hydrus/pull/594
  • https://github.com/HTTP-APIs/hydra-python-core/issues/88
  • https://github.com/HTTP-APIs/hydra-python-core/pull/91
  • HydrusのDateTime列のサポートを追加する


    At this point, only integer, float, string were supported datatypes in database.


    このAPIは、ユーザがAPI docを作成している間に、“xsd : datetime”のようなデータ型を指定できるようにすることでした.データベース列はそれに応じて作成されるべきです.SQLAlchemy datetime列はDateTimeオブジェクトのみを使用します.しかし、ユーザーはリクエスト本文にDateTimeオブジェクトを送ることができません(JSONシリアル化ではありません).このため、datetime文字列をPython datetimeオブジェクトに変換するヘルパー関数を作成し、データベースに挿入します.ヘルパー関数(GetRound ModifiedHoundオブジェクト)は、実際にDateTimeフィールドであるObject(要求本体)でサポートされているプロパティが存在するかどうかをチェックします.を返します.
    関連する問題とプル要求
  • https://github.com/HTTP-APIs/hydrus/issues/598
  • https://github.com/HTTP-APIs/hydrus/pull/599
  • Hydrusにおける既存テストケースの変化


    さらにいくつかのテストを追加し、既存のテストケースの変更を行いました.regexは、挿入されたオブジェクトのIDをレスポンス記述から取得するために使用されていました.代わりに私はresponse.location テスト中に作成したオブジェクトのIDを取得するには
    PRhttps://github.com/HTTP-APIs/hydrus/pull/601

    POCのためのDockermation


    私に割り当てられた次のタスクは、コンテナ化することでしたcreditrisk-poc そして、コンテナの中でHydrus ServerとPostgresデータベースのようなサービスを実行するためにDockerを使用します.既存のリポジトリに変更を加え、DockerFileとDockerの作成ファイルを作成しました.以前は、ConfigParserを使用して設定環境変数をconfigから取得しました.代わりに使用するiniファイルos モジュールをDocker compose fileから変数をenvとし、uwsgi.ini nginxを使用してサーバを実行します.
    プル要求:
  • https://github.com/HTTP-APIs/creditrisk-poc/pull/25
  • https://github.com/HTTP-APIs/creditrisk-poc/pull/26
  • PyTestを用いたHydraパイソンコアにおけるテストカバレッジの改善


    つのテストだけがDOCHEGライターとコンテキストをテストするために存在していた.より多くのテストは、Hydraclass、Hydracollection、HydraentryPointと他の多くのようなDocChort Writerのさまざまな構成要素のために、Harmonse Pythoncoreコアで加えられます.これとは別に、私たちは以前、模擬クラスとオブジェクトを作成するためにUnittestの模擬を使用していました.それに加えて、PyTestのフィクスチャを使用して、異なるコンポーネントをテストし、読みやすさを改善し、テストカバレッジを向上させました.
    PRhttps://github.com/HTTP-APIs/hydra-python-core/pull/93
    コーディング期間中に完了したこれらの成果物は別として.私はまた、この期間中に発見されたいくつかのバグや問題に取り組んだ.
    私は貢献セクションで行われたすべてのプル要求のリストを追加します.

    🚀 貢献(コーディング期間中)


    プルリクエスト


    PRリンク
    説明
    ステータス
    #554
    コレクションのメンバーを取得/削除する新しい終了点を追加しました.
    合併✅
    #578
    更新ドキュメントと固定フラグメントテスト.
    合併✅
    #580
    コレクションから複数のメンバーを削除する
    合併✅
    #590
    GET、PUT、クラスとコレクションの複数のオブジェクトの削除のための変更されたエンドポイント形式
    合併✅
    #591
    追加/削除複数のクラスオブジェクトの機能テストを追加
    合併✅
    #593
    コレクションとマネージクラス間の外部キー関係の追加
    合併✅
    #594
    データベース表の列に対するデータ型のサポートを追加しました
    合併✅
    #597
    PHPI上でのリリースを発行するGithubアクションを使用したワークフロー
    合併✅
    #599
    datebaseのdatetimeカラムのサポートを追加しました
    合併✅
    #601
    水和物における試験の変化
    合併✅
    #603
    配備のためのgettle hostchenドメイン機能を修正してください
    合併✅
    #81
    Hydra PythonコアのリソースURI形式の変更
    オープン
    #84
    修正DocCountメーカーと更新されたサンプルドキュメント
    合併✅
    #91
    サポートされているプロパティのデータ型のサポートを追加しました
    合併✅
    #93
    ヒドラパイソン芯で更なるテスト
    オープン
    #25
    ドカケス
    合併✅
    #26
    Docker構成からapidocパス環境変数を削除する
    合併✅

    謝辞


    プロジェクトとGSOCの旅を通して、彼らのガイダンスとsuppportのために私の指導者に感謝したいです.
    私は、それが書くコードとテストの私のスタイルにプラスの影響を及ぼしたと完全に信じています.私は、プロジェクトの完成後も、この団体の活動的な貢献者やメンバーになることを熱望しています.
  • Lorenzo Moriondo
  • Phillipos Papadopoulas
  • Chris Andrew
  • Priyanshu Nayan
  • Samesh Lakhotia
  • 私も、私のGSOC同僚に感謝したいですPurvansh Singh プログラムの間の協同と議論のために.

    🔗 連絡先